+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
}
/* 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;
}
--- /dev/null
+// 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 ();
+}