| /* Spurious uninitialized variable warnings, case 2. |
| Taken from cpphash.c (macroexpand) */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O -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); |
| } |
| } |