From: Nick Bowler Date: Mon, 4 Dec 2023 02:17:46 +0000 (-0500) Subject: Fix tests build on compilers without _Bool. X-Git-Tag: v1.3~72 X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/commitdiff_plain/90eaf19d63952c7df0239dcd7c6c09b4292aa575 Fix tests build on compilers without _Bool. For these test programs, there is no advantage to using _Bool over just plain "int" or whatever. --- diff --git a/t/declgen.c b/t/declgen.c index 4526c0e..630ab90 100644 --- a/t/declgen.c +++ b/t/declgen.c @@ -23,7 +23,6 @@ #include #include #include -#include #include "declgen.h" #include "cdecl.h" @@ -33,7 +32,7 @@ * Return a newly-allocated null declarator. The child member is set by the * argument; other members are initialized to zero. */ -struct cdecl_declarator *new_declarator(struct cdecl_declarator *child) +static struct cdecl_declarator *new_declarator(struct cdecl_declarator *child) { struct cdecl_declarator *d, init = { child, CDECL_DECL_NULL }; @@ -47,7 +46,7 @@ struct cdecl_declarator *new_declarator(struct cdecl_declarator *child) * Return a newly-allocated void specifier. The next member is set by the * argument; other members are initialized to zero. */ -struct cdecl_declspec *new_specifier(struct cdecl_declspec *next) +static struct cdecl_declspec *new_specifier(struct cdecl_declspec *next) { struct cdecl_declspec *d, init = { next, CDECL_TYPE_VOID }; @@ -61,7 +60,7 @@ struct cdecl_declspec *new_specifier(struct cdecl_declspec *next) * Return a newly-allocated declaration. The next member is set by the * argument; other members are initialized to zero. */ -struct cdecl *new_cdecl(struct cdecl *next) +static struct cdecl *new_cdecl(struct cdecl *next) { struct cdecl *d, init = { next }; @@ -76,7 +75,7 @@ struct cdecl *new_cdecl(struct cdecl *next) * possible. Avoid generating keywords, including the English ones, by * excluding the letters t, o, a and n. Reserved words are OK. */ -char *gen_identifier(struct test_rng *rng) +static char *gen_identifier(struct test_rng *rng) { static const char valid[59] = "_bcdefghijklmpqrsuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; size_t i, n; @@ -99,16 +98,17 @@ char *gen_identifier(struct test_rng *rng) * list is (potentially) unbounded. We handle the potential unboundedness by * generating a list of n qualifiers with probability 1/2^(n+1). Each * qualifier is chosen uniformly at random from the set of possibilities: - * const, volatile and, if restrictqual is true, restrict. + * const, volatile and, if restrictqual is nonzero, restrict. */ -struct cdecl_declspec *gen_qualifiers(struct test_rng *rng, bool restrictqual) +static struct cdecl_declspec * +gen_qualifiers(struct test_rng *rng, int restrictqual) { struct cdecl_declspec *s = NULL; while (test_rng_50_50(rng)) { s = new_specifier(s); - switch (test_rng_uniform_int(rng, 2+restrictqual)) { + switch (test_rng_uniform_int(rng, 2+!!restrictqual)) { case 0: s->type = CDECL_QUAL_CONST; break; @@ -130,7 +130,7 @@ struct cdecl_declspec *gen_qualifiers(struct test_rng *rng, bool restrictqual) * Generate random function specifiers. Like qualifiers, function specifiers * can appear multiple times. */ -struct cdecl_declspec *gen_funcspecs(struct test_rng *rng) +static struct cdecl_declspec *gen_funcspecs(struct test_rng *rng) { struct cdecl_declspec *s = NULL; @@ -144,10 +144,11 @@ struct cdecl_declspec *gen_funcspecs(struct test_rng *rng) /* * Generate zero or one random storage-class specifier. If registeronly is - * true, then the only possible storage-class specifier is "register". + * nonzero, then the only possible storage-class specifier is "register". * Otherwise, a specifier type will be selected uniformly at random. */ -struct cdecl_declspec *gen_storspecs(struct test_rng *rng, bool registeronly) +static struct cdecl_declspec * +gen_storspecs(struct test_rng *rng, int registeronly) { struct cdecl_declspec *s; @@ -173,7 +174,8 @@ struct cdecl_declspec *gen_storspecs(struct test_rng *rng, bool registeronly) */ #include "typegen.h" -struct cdecl_declspec *gen_typespecs(struct test_rng *rng, bool voidtype) +static struct cdecl_declspec * +gen_typespecs(struct test_rng *rng, int voidtype) { struct cdecl_declspec *specs; @@ -205,7 +207,7 @@ retry: return specs; } -struct cdecl_declspec * +static struct cdecl_declspec * gen_randomize_specs(struct test_rng *rng, struct cdecl_declspec *specs) { struct cdecl_declspec *s, **p; @@ -282,7 +284,7 @@ gen_declspecs(struct test_rng *rng, unsigned flags) for (p = s; p->next;) p = p->next; - p->next = gen_qualifiers(rng, false); + p->next = gen_qualifiers(rng, 0); return gen_randomize_specs(rng, s); } @@ -387,7 +389,7 @@ struct cdecl_declarator *gen_declarators(struct test_rng *rng) switch (test_rng_uniform_int(rng, limit)) { case 0: d->type = CDECL_DECL_POINTER; - d->u.pointer.qualifiers = gen_qualifiers(rng, true); + d->u.pointer.qualifiers = gen_qualifiers(rng, 1); limit = 3; break; case 1: @@ -400,7 +402,7 @@ struct cdecl_declarator *gen_declarators(struct test_rng *rng) struct cdecl_pointer *ptr = &p->u.pointer; gen_free_declspecs(ptr->qualifiers); - ptr->qualifiers = gen_qualifiers(rng, false); + ptr->qualifiers = gen_qualifiers(rng, 0); } limit = 1; break; diff --git a/t/declgen.h b/t/declgen.h index ff40b90..714efd2 100644 --- a/t/declgen.h +++ b/t/declgen.h @@ -1,6 +1,6 @@ /* * Generate random C declarations for testing. - * Copyright © 2012, 2022 Nick Bowler + * Copyright © 2012, 2022-2023 Nick Bowler * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,10 +28,6 @@ enum { struct test_rng; -struct cdecl_declspec *gen_qualifiers(struct test_rng *rng, _Bool pointer); -struct cdecl_declspec *gen_typespecs(struct test_rng *rng, _Bool novoid); -struct cdecl_declspec *gen_randomize_specs(struct test_rng *rng, - struct cdecl_declspec *specs); struct cdecl_declspec *gen_declspecs(struct test_rng *rng, unsigned flags); struct cdecl_declarator *gen_declarators(struct test_rng *rng);