Commit 8353dd9a by Jason Merrill Committed by Jason Merrill

re PR c++/37276 (Trouble with some (C99?) math builtins and namespace std)

	PR c++/37276
	* decl.c (decls_match): A non-extern-C declaration doesn't match
	a builtin extern-C declaration.

From-SVN: r149638
parent 3deeb3ff
2009-07-14 Jason Merrill <jason@redhat.com> 2009-07-14 Jason Merrill <jason@redhat.com>
PR c++/37276
* decl.c (decls_match): A non-extern-C declaration doesn't match
a builtin extern-C declaration.
PR c++/40746 PR c++/40746
* name-lookup.c (qualified_lookup_using_namespace): Don't stop * name-lookup.c (qualified_lookup_using_namespace): Don't stop
looking in used namespaces just because we found something on looking in used namespaces just because we found something on
...@@ -8,8 +12,6 @@ ...@@ -8,8 +12,6 @@
PR c++/40740 PR c++/40740
* semantics.c (perform_koenig_lookup): Handle empty template args. * semantics.c (perform_koenig_lookup): Handle empty template args.
2009-07-13 Jason Merrill <jason@redhat.com>
* call.c (build_over_call): Use can_trust_pointer_alignment. * call.c (build_over_call): Use can_trust_pointer_alignment.
2009-07-14 Dodji Seketeli <dodji@redhat.com> 2009-07-14 Dodji Seketeli <dodji@redhat.com>
......
...@@ -932,6 +932,14 @@ decls_match (tree newdecl, tree olddecl) ...@@ -932,6 +932,14 @@ decls_match (tree newdecl, tree olddecl)
&& DECL_EXTERN_C_P (olddecl))) && DECL_EXTERN_C_P (olddecl)))
return 0; return 0;
#ifdef NO_IMPLICIT_EXTERN_C
/* A new declaration doesn't match a built-in one unless it
is also extern "C". */
if (DECL_BUILT_IN (olddecl)
&& DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
return 0;
#endif
if (TREE_CODE (f1) != TREE_CODE (f2)) if (TREE_CODE (f1) != TREE_CODE (f2))
return 0; return 0;
......
2009-07-14 Jason Merrill <jason@redhat.com> 2009-07-14 Jason Merrill <jason@redhat.com>
PR c++/37276
* g++.dg/lookup/builtin5.C: New.
* g++.dg/other/error22.C: Add missing extern "C".
* g++.dg/warn/Warray-bounds.C: Likewise.
* gcc.dg/compat/compat-common.h: Likewise.
PR c++/40746 PR c++/40746
* g++.dg/lookup/using20.C: New. * g++.dg/lookup/using20.C: New.
......
// PR c++/37276
// { dg-final { scan-assembler "_ZSt5atanhd" } }
namespace std
{
inline double
atanh(double __x)
{ return __builtin_atanh(__x); }
}
int main()
{
std::atanh(.3);
return 0;
}
// PR c++/34394 // PR c++/34394
// { dg-do compile } // { dg-do compile }
extern double fabs (double); extern "C" double fabs (double);
void foo (double x) void foo (double x)
{ {
......
...@@ -3,8 +3,9 @@ ...@@ -3,8 +3,9 @@
int a[10]; int a[10];
extern "C" __SIZE_TYPE__ strlen(const char *s);
static inline int n(void) { static inline int n(void) {
__SIZE_TYPE__ strlen(const char *s);
return strlen("12345"); return strlen("12345");
} }
......
...@@ -47,5 +47,9 @@ ...@@ -47,5 +47,9 @@
#endif #endif
#endif #endif
#ifdef __cplusplus
extern "C" void abort (void);
#else
extern void abort (void); extern void abort (void);
#endif
extern int fails; extern int fails;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment