diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index eecdd1a1941..41fb7923a7e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2010-03-20 Dodji Seketeli + + PR c++/43375 + * method.c (make_alias_for): Avoid crashing when DECL_LANG_SPECIFIC + is NULL. + * decl2.c (vague_linkage_p): Likewise. + 2010-03-18 Paolo Carlini PR c++/43418 diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 81d7ee3212f..4e4930af563 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -1655,7 +1655,8 @@ vague_linkage_p (tree decl) return (DECL_COMDAT (decl) || (((TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)) - || DECL_TEMPLATE_INSTANTIATION (decl)) + || (DECL_LANG_SPECIFIC (decl) + && DECL_TEMPLATE_INSTANTIATION (decl))) && TREE_PUBLIC (decl))); } diff --git a/gcc/cp/method.c b/gcc/cp/method.c index a93ad068e52..5ed98bc93bd 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -221,12 +221,15 @@ make_alias_for (tree target, tree newid) TREE_THIS_VOLATILE (alias) = TREE_THIS_VOLATILE (target); TREE_PUBLIC (alias) = 0; DECL_INTERFACE_KNOWN (alias) = 1; - DECL_NOT_REALLY_EXTERN (alias) = 1; + if (DECL_LANG_SPECIFIC (alias)) + { + DECL_NOT_REALLY_EXTERN (alias) = 1; + DECL_USE_TEMPLATE (alias) = 0; + DECL_TEMPLATE_INFO (alias) = NULL; + } DECL_EXTERNAL (alias) = 0; DECL_ARTIFICIAL (alias) = 1; - DECL_USE_TEMPLATE (alias) = 0; DECL_TEMPLATE_INSTANTIATED (alias) = 0; - DECL_TEMPLATE_INFO (alias) = NULL; if (TREE_CODE (alias) == FUNCTION_DECL) { DECL_SAVED_FUNCTION_DATA (alias) = NULL; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8e5ca1fe14e..f0d88f0ed71 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-03-20 Dodji Seketeli + + PR c++/43375 + * g++.dg/abi/mangle42.C: New test. + 2010-03-19 Andrew Pinski PR C/43211 diff --git a/gcc/testsuite/g++.dg/abi/mangle42.C b/gcc/testsuite/g++.dg/abi/mangle42.C new file mode 100644 index 00000000000..730781b300b --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/mangle42.C @@ -0,0 +1,14 @@ +// Origin: PR c++/43375 +// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-options "-msse2 -std=gnu++0x" } + +typedef float __v4sf __attribute__ ((__vector_size__ (16))); +typedef int __v4si __attribute__ ((__vector_size__ (16))); +__v4sf my_asin(__v4sf x) +{ + static const __v4si g_Mask{0x7fffffff, + 0x00000000, + 0x7fffffff, + 0x7fffffff }; + return __builtin_ia32_andnps ((__v4sf) g_Mask, x); +}