PR c++/15774
* decl.c (decls_match): Check for FUNCTION_DECL
also for identity of compatible attributes.
ChangeLog gcc/testsuite
2010-12-25 Kai Tietz <kai.tietz@onevision.com>
PR c++/15774
* g++.dg/warn/pr15774-1.C: New test.
* g++.dg/warn/pr15774-2.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168241
138bc75d-0d04-0410-961f-
82ee72b054a4
+2010-12-25 Kai Tietz <kai.tietz@onevision.com>
+
+ PR c++/15774
+ * decl.c (decls_match): Check for FUNCTION_DECL
+ also for identity of compatible attributes.
+
2010-12-22 Nathan Froyd <froydnj@codesourcery.com>
* decl.c (decls_match, duplicate_decls): Use prototype_p.
}
#endif
else
- types_match = compparms (p1, p2);
+ types_match =
+ compparms (p1, p2)
+ && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
+ || targetm.comp_type_attributes (TREE_TYPE (newdecl),
+ TREE_TYPE (olddecl)) != 0);
}
else
types_match = 0;
+2010-12-25 Kai Tietz <kai.tietz@onevision.com>
+
+ PR c++/15774
+ * g++.dg/warn/pr15774-1.C: New test.
+ * g++.dg/warn/pr15774-2.C: New test.
+
2010-12-24 Nicola Pero <nicola.pero@meta-innovation.com>
* objc.dg/gnu-api-2-sel.m: Test calling sel_getUid,
--- /dev/null
+// { dg-do compile { target { { i?86-*-* x86_64-*-* } && ilp32 } } }
+// Test that an new declartion with different attributes then old one fail.
+extern void foo (int); // { dg-error "ambiguates old declaration" }
+
+void
+bar (void)
+{
+ foo (1);
+}
+
+void __attribute__((stdcall)) foo (int i) // { dg-error "new declaration" }
+{
+}
+
+
--- /dev/null
+// { dg-do compile { target { { i?86-*-* x86_64-*-* } && ilp32 } } }
+// Test that old declaration is used, if new one has no attributes.
+extern void __attribute__((stdcall)) foo (int);
+
+void
+bar (void)
+{
+ foo (1);
+}
+
+void foo (int i)
+{
+}
+
+