diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2003-12-30 12:18:28 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2003-12-30 12:18:28 +0000 |
commit | 74869a8523751c03db3264bcef72ade1c10bfa6a (patch) | |
tree | 45041e4ce33cce9ed6aa0b9a4de39c157311dcf1 | |
parent | b976c2fc2962376675a381fbccc814d546b1dfd4 (diff) | |
download | gcc-74869a8523751c03db3264bcef72ade1c10bfa6a.zip gcc-74869a8523751c03db3264bcef72ade1c10bfa6a.tar.gz gcc-74869a8523751c03db3264bcef72ade1c10bfa6a.tar.bz2 |
re PR c++/13507 (spurious printf format warning)
cp:
PR c++/13507
* decl.c (duplicate_decls): Use build_type_attribute_variant to
merge attributes.
testsuite:
PR c++/13507
* g++.dg/ext/attrib11.C: New test.
From-SVN: r75229
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/decl.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/attrib11.C | 17 |
4 files changed, 30 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 15947ba..d56d24c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2003-12-30 Nathan Sidwell <nathan@codesourcery.com> + PR c++/13507 + * decl.c (duplicate_decls): Use build_type_attribute_variant to + merge attributes. + PR c++/13494 * tree.c (build_cplus_array_type_1): Only build a minimal array type for dependent types or domains. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 80041cb..c7a294d 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1262,10 +1262,12 @@ duplicate_decls (tree newdecl, tree olddecl) for anticipated built-ins, for exception lists, etc... */ else if (DECL_ANTICIPATED (olddecl)) { - TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) - = (*targetm.merge_type_attributes) (TREE_TYPE (olddecl), - TREE_TYPE (newdecl)); - TREE_TYPE (olddecl) = TREE_TYPE (newdecl); + tree type = TREE_TYPE (newdecl); + tree attribs = (*targetm.merge_type_attributes) + (TREE_TYPE (olddecl), type); + + type = build_type_attribute_variant (type, attribs); + TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type; } /* Whether or not the builtin can throw exceptions has no diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 992e6f4..d13331f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2003-12-30 Nathan Sidwell <nathan@codesourcery.com> + PR c++/13507 + * g++.dg/ext/attrib11.C: New test. + PR c++/13494 * g++.dg/template/array2-1.C: New test. * g++.dg/template/array2-2.C: New test. diff --git a/gcc/testsuite/g++.dg/ext/attrib11.C b/gcc/testsuite/g++.dg/ext/attrib11.C new file mode 100644 index 0000000..26bc790 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/attrib11.C @@ -0,0 +1,17 @@ +// { dg-do compile } +// { dg-options "-Wall" } + +// Copyright (C) 2003 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 30 Dec 2003 <nathan@codesourcery.com> + + +// PR c++/13507, spurious warning due to attribute clobbering +extern "C" { + extern int printf (__const char *__restrict __format, ...) throw (); + extern int scanf (__const char *__restrict __format, ...) throw (); +} + +void foo(unsigned int x) +{ + printf ("%d\n", x); +} |