* call.c (equal_functions): Also call decls_match for extern "C" fns.
From-SVN: r37024
This commit is contained in:
parent
57dd137ffb
commit
6c6ed0ef92
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 ();
|
||||
}
|
Loading…
Reference in New Issue