/* Spurious uninitialized variable warnings, case 2. Taken from cpphash.c (macroexpand) */ /* { dg-do compile } */ /* { dg-options "-Wuninitialized" } */ struct definition { int nargs; int rest_args; }; struct cpp_reader; enum cpp_token { CPP_EOF, CPP_POP, CPP_COMMA, CPP_RPAREN }; extern enum cpp_token macarg (struct cpp_reader *, int); void macroexpand (struct cpp_reader *pfile, struct definition *defn) { int nargs = defn->nargs; if (nargs >= 0) { enum cpp_token token; /* { dg-bogus "token" "uninitialized variable warning" } */ int i, rest_args; i = 0; rest_args = 0; do { if (rest_args) continue; if (i < nargs || (nargs == 0 && i == 0)) { /* if we are working on last arg which absorbs rest of args... */ if (i == nargs - 1 && defn->rest_args) rest_args = 1; token = macarg (pfile, rest_args); } else token = macarg (pfile, 0); if (token == CPP_EOF || token == CPP_POP) return; i++; } while (token == CPP_COMMA); } }