* call.c (equal_functions): Also call decls_match for extern "C" fns.

From-SVN: r37024
This commit is contained in:
Jason Merrill 2000-10-23 17:38:33 -04:00 committed by Jason Merrill
parent 57dd137ffb
commit 6c6ed0ef92
3 changed files with 28 additions and 2 deletions

View File

@ -1,3 +1,12 @@
2000-10-23 Jason Merrill <jason@redhat.com>
* call.c (equal_functions): Also call decls_match for extern "C" fns.
2000-10-22 Jason Merrill <jason@redhat.com>
* call.c (build_conditional_expr): Use ocp_convert to force
rvalue conversion.
2000-10-22 Mark Mitchell <mark@codesourcery.com>
* call.c (standard_conversion): Use RVALUE_CONVs for all

View File

@ -4931,14 +4931,16 @@ add_warning (winner, loser)
}
/* Returns true iff functions are equivalent. Equivalent functions are
not identical only if one is a function-local extern function. */
not '==' only if one is a function-local extern function or if
both are extern "C". */
static inline int
equal_functions (fn1, fn2)
tree fn1;
tree fn2;
{
if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2))
if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
|| DECL_EXTERN_C_FUNCTION_P (fn1))
return decls_match (fn1, fn2);
return fn1 == fn2;
}

View File

@ -0,0 +1,15 @@
// Test that two extern "C" declarations of the same name in different
// namespaces are treated as declaring the same function.
namespace foo {
extern "C" int f ();
}
extern "C" int f () { return 0; }
using namespace foo;
int main ()
{
f ();
}