re PR c++/15774 (Conflicting function decls not diagnosed)

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.


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.

From-SVN: r168241
This commit is contained in:
Kai Tietz 2010-12-25 10:41:05 +00:00 committed by Kai Tietz
parent 784904958d
commit bc30fc12b1
5 changed files with 47 additions and 1 deletions

View File

@ -1,3 +1,9 @@
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.

View File

@ -1009,7 +1009,11 @@ decls_match (tree newdecl, tree olddecl)
}
#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;

View File

@ -1,3 +1,9 @@
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,

View File

@ -0,0 +1,15 @@
// { 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" }
{
}

View File

@ -0,0 +1,15 @@
// { 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)
{
}