diff options
author | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-03-11 16:00:04 +0000 |
---|---|---|
committer | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-03-11 16:00:04 +0000 |
commit | d087657d05d68f46ab4a281cfa4332e86bfdc603 (patch) | |
tree | d4f55fba94d663fb40475af5fae16b35b45c6dab /gcc/testsuite/gcc.dg/uninit-2.c | |
parent | 7013985c085961baa90028f9129cddefabf7e6b1 (diff) | |
download | gcc-d087657d05d68f46ab4a281cfa4332e86bfdc603.tar.gz |
l
Tests for various kinds of spurious uninit variable warning.
All are derived from cpplib; see comments in the files.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@25710 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/gcc.dg/uninit-2.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/uninit-2.c | 52 |
1 files changed, 52 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 00000000000..5035a309ebd --- /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); + } +} |