Tests for various kinds of spurious uninit variable warning.

l
Tests for various kinds of spurious uninit variable warning.
All are derived from cpplib; see comments in the files.

From-SVN: r25710
This commit is contained in:
Zack Weinberg 1999-03-11 16:00:04 +00:00
parent eb7721afcf
commit 85eb94a0e3
2 changed files with 102 additions and 0 deletions

View File

@ -0,0 +1,52 @@
/* 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" { xfail *-*-* } } */
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);
}
}

View File

@ -0,0 +1,50 @@
/* Spurious uninit variable warnings, case 4.
Simplified version of cppexp.c (cpp_parse_expr).
This one is really fragile, it gets it right if you take out case
1, or if the structure is replaced by an int, or if the structure
has fewer members (!) */
/* { dg-do compile } */
/* { dg-options "-O -Wuninitialized" } */
struct operation {
short op;
char rprio;
char flags;
char unsignedp;
long value;
};
extern struct operation cpp_lex (void);
void
cpp_parse_expr (void)
{
int rprio; /* { dg-bogus "rprio" "uninitialized variable warning" { xfail *-*-* } } */
struct operation op;
for (;;)
{
op = cpp_lex ();
switch (op.op)
{
case 0:
break;
case 1:
return;
case 2:
rprio = 1;
break;
default:
return;
}
if (op.op == 0)
return;
if (rprio != 1)
abort();
}
}