From 7072018ecfcc4d60e3ad9f5d8a078f672da6817f Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Sun, 28 Dec 2003 22:22:13 +0000 Subject: [PATCH] re PR c++/13070 (-Wformat option ignored in g++) PR c++/13070 * decl.c (duplicate_decls): When setting the type of an anticipated declaration, merge the existing type attributes. * g++.dg/warn/format3.C: New test case. From-SVN: r75185 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl.c | 7 ++++++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/warn/format3.C | 12 ++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/warn/format3.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4adb918f355..1d96aaf3336 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2003-12-28 Roger Sayle + + PR c++/13070 + * decl.c (duplicate_decls): When setting the type of an anticipated + declaration, merge the existing type attributes. + 2003-12-25 Andrew Pinski PR c++/13268, c++/13339 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 09b002201cc..0c0803b7c7e 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1261,7 +1261,12 @@ duplicate_decls (tree newdecl, tree olddecl) /* Even if the types match, prefer the new declarations type for anticipated built-ins, for exception lists, etc... */ else if (DECL_ANTICIPATED (olddecl)) - TREE_TYPE (olddecl) = TREE_TYPE (newdecl); + { + TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) + = (*targetm.merge_type_attributes) (TREE_TYPE (olddecl), + TREE_TYPE (newdecl)); + TREE_TYPE (olddecl) = TREE_TYPE (newdecl); + } /* Whether or not the builtin can throw exceptions has no bearing on this declarator. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b124d130981..6f601e31555 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-12-28 Roger Sayle + + PR c++/13070 + * g++.dg/warn/format3.C: New test case. + 2003-12-27 Zdenek Dvorak * gcc.c-torture/compile/20031227-1.c: New test. diff --git a/gcc/testsuite/g++.dg/warn/format3.C b/gcc/testsuite/g++.dg/warn/format3.C new file mode 100644 index 00000000000..0bdaaee1772 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/format3.C @@ -0,0 +1,12 @@ +// PR c++/13070 +// { dg-do compile } +// { dg-options "-Wformat" } + +extern "C" int printf (const char*, ...); + +int main() +{ + printf("%d\n", 1, 1); // { dg-warning "too many" "printf warning" } + return 0; +} +