diff options
author | Zack Weinberg <zack@gcc.gnu.org> | 1999-03-11 16:00:04 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 1999-03-11 16:00:04 +0000 |
commit | 85eb94a0e330830fa5ebb0313933f66fb845a634 (patch) | |
tree | d4f55fba94d663fb40475af5fae16b35b45c6dab /gcc | |
parent | eb7721afcf8b39b6276852e0e179c708f78a8d28 (diff) | |
download | gcc-85eb94a0e330830fa5ebb0313933f66fb845a634.zip gcc-85eb94a0e330830fa5ebb0313933f66fb845a634.tar.gz gcc-85eb94a0e330830fa5ebb0313933f66fb845a634.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.dg/uninit-2.c | 52 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/uninit-4.c | 50 |
2 files changed, 102 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/uninit-2.c b/gcc/testsuite/gcc.dg/uninit-2.c new file mode 100644 index 0000000..5035a30 --- /dev/null +++ b/gcc/testsuite/gcc.dg/uninit-2.c @@ -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); + } +} diff --git a/gcc/testsuite/gcc.dg/uninit-4.c b/gcc/testsuite/gcc.dg/uninit-4.c new file mode 100644 index 0000000..3497353 --- /dev/null +++ b/gcc/testsuite/gcc.dg/uninit-4.c @@ -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(); + } +} |