aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2003-12-30 12:18:28 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2003-12-30 12:18:28 +0000
commit74869a8523751c03db3264bcef72ade1c10bfa6a (patch)
tree45041e4ce33cce9ed6aa0b9a4de39c157311dcf1
parentb976c2fc2962376675a381fbccc814d546b1dfd4 (diff)
downloadgcc-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/ChangeLog4
-rw-r--r--gcc/cp/decl.c10
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/ext/attrib11.C17
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);
+}