#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <limits.h>
#include <errno.h>
#include <assert.h>
#include <stdbool.h>
case CDECL_TYPE_IDENT:
assert(!specs->next);
specs->ident = gen_identifier(rng);
+ break;
+ default:
+ /* Nothing to be done. */
+ ;
}
return specs;
return gen_randomize_specs(rng, s);
}
+static uintmax_t gen_uintmax(struct gen_rng *rng)
+{
+ unsigned char tmp;
+ uintmax_t ret = 0;
+
+ for (size_t i = 0; i < sizeof ret; i++) {
+ tmp = gsl_rng_uniform_int(rng->rng, UCHAR_MAX+1);
+ ret <<= CHAR_BIT;
+ ret |= tmp;
+ }
+
+ return ret;
+}
+
/*
* Generate a random array declarator, selecting one of four possibilities
* uniformly at random.
d->u.array = (struct cdecl_array){0};
switch (gsl_rng_uniform_int(rng->rng, 4)) {
- case '0':
+ case 0:
d->u.array.vla = malloc_nofail(1);
d->u.array.vla[0] = 0;
break;
- case '1':
+ case 1:
d->u.array.vla = gen_identifier(rng);
break;
- case '2':
+ case 2:
d->u.array.length = 0;
break;
- case '3':
- d->u.array.length = gsl_rng_uniform_int(rng->rng, -1);
+ case 3:
+ d->u.array.length = gen_uintmax(rng);
break;
+ default:
+ assert(0);
}
}