diff options
author | Dodji Seketeli <dodji@redhat.com> | 2010-03-20 08:55:32 +0000 |
---|---|---|
committer | Dodji Seketeli <dodji@gcc.gnu.org> | 2010-03-20 09:55:32 +0100 |
commit | 39bac0102c930a6d38486f5716793d531dc90302 (patch) | |
tree | 2cbb1e98a70db4f750198b5cede54daf5d4f5bcc | |
parent | 4dd9ee924baa6c168c7c25d07e364d39729f4e8c (diff) | |
download | gcc-39bac0102c930a6d38486f5716793d531dc90302.tar.gz |
re PR c++/43375 (ICE during compiling SSE code)
Fix for PR c++/43375
gcc/cp/ChangeLog:
PR c++/43375
* method.c (make_alias_for): Avoid crashing when DECL_LANG_SPECIFIC
is NULL.
* decl2.c (vague_linkage_p): Likewise.
gcc/testsuite/g++.dg/ChangeLog:
PR c++/43375
* g++.dg/abi/mangle42.C: New test.
From-SVN: r157590
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 3 | ||||
-rw-r--r-- | gcc/cp/method.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/mangle42.C | 14 |
5 files changed, 34 insertions, 4 deletions
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 <dodji@redhat.com> + + 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 <paolo.carlini@oracle.com> 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 <dodji@redhat.com> + + PR c++/43375 + * g++.dg/abi/mangle42.C: New test. + 2010-03-19 Andrew Pinski <andrew_pinski@caviumnetworks.com> 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); +} |