diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f5c69d5c07a..651dd2a3a51 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-04-01 Volker Reichelt + + PR c/35436 + * c-format.c (init_dynamic_gfc_info): Ignore invalid locus type. + 2008-04-02 Ben Elliston * config/v850/v850.md (casesi): Remove if (0) code. diff --git a/gcc/c-format.c b/gcc/c-format.c index 13de9106f3a..d1a136f87ec 100644 --- a/gcc/c-format.c +++ b/gcc/c-format.c @@ -2474,7 +2474,8 @@ init_dynamic_gfc_info (void) locus = identifier_global_value (locus); if (locus) { - if (TREE_CODE (locus) != TYPE_DECL) + if (TREE_CODE (locus) != TYPE_DECL + || TREE_TYPE (locus) == error_mark_node) { error ("% is not defined as a type"); locus = 0; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8e9f51b84eb..5808d5cb4e2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ +2008-04-01 Volker Reichelt + + PR c/35436 + * gcc.dg/format/gcc_gfc-2.c: New test. + 2008-03-31 Seongbae Park - * g++.db/bprob/bprob.exp: Do not check gcno files. + * g++.dg/bprob/bprob.exp: Do not check gcno files. Use -fprofile-use for profile use. * gcc.misc-tests/bprob.exp: Ditto. * g++.dg/tree-pro/tree-prof.exp: Do not check gcno files. diff --git a/gcc/testsuite/gcc.dg/format/gcc_gfc-2.c b/gcc/testsuite/gcc.dg/format/gcc_gfc-2.c new file mode 100644 index 00000000000..f3095fa296f --- /dev/null +++ b/gcc/testsuite/gcc.dg/format/gcc_gfc-2.c @@ -0,0 +1,13 @@ +/* PR c/35436 */ +/* { dg-do compile } */ +/* { dg-options "-Wformat" } */ + +typedef void locus[1]; /* { dg-error "array of void" } */ + +void foo(const char*, ...) + __attribute__((__format__(__gcc_gfc__, 1, 2))); /* { dg-error "locus" } */ + +void bar() +{ + foo("%L", 0); /* { dg-warning "format" } */ +}