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:
parent
eb7721afcf
commit
85eb94a0e3
52
gcc/testsuite/gcc.dg/uninit-2.c
Normal file
52
gcc/testsuite/gcc.dg/uninit-2.c
Normal 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);
|
||||
}
|
||||
}
|
50
gcc/testsuite/gcc.dg/uninit-4.c
Normal file
50
gcc/testsuite/gcc.dg/uninit-4.c
Normal 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();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user