aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2014-12-15 04:44:58 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2014-12-15 03:44:58 +0000
commit59b5b46686c45c803118ad4dee42d8919e305bc0 (patch)
treef143208f83496b098dd8ffd5779764b33414e977 /gcc
parent38c1b72fcb541aca26ad94f4e9a7d9c8261422ed (diff)
downloadgcc-59b5b46686c45c803118ad4dee42d8919e305bc0.zip
gcc-59b5b46686c45c803118ad4dee42d8919e305bc0.tar.gz
gcc-59b5b46686c45c803118ad4dee42d8919e305bc0.tar.bz2
re PR middle-end/61558 (ICE: Segmentation fault)
PR ipa/61558 * symtab.c (symbol_table::insert_to_assembler_name_hash symbol_table::unlink_from_assembler_name_hash): Do not ICE when DECL_ASSEMBLER_NAME is NULL. From-SVN: r218729
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/symtab.c9
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/torture/pr61558.C6
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1c637f6..253db82 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2014-12-14 Jan Hubicka <hubicka@ucw.cz>
+ PR ipa/61558
+ * symtab.c (symbol_table::insert_to_assembler_name_hash
+ symbol_table::unlink_from_assembler_name_hash): Do not ICE when
+ DECL_ASSEMBLER_NAME is NULL.
+
+2014-12-14 Jan Hubicka <hubicka@ucw.cz>
+
* cgraphunit.c (analyze_functions): Always analyze targets of aliases.
2014-12-14 Jan Hubicka <hubicka@ucw.cz>
diff --git a/gcc/symtab.c b/gcc/symtab.c
index 101bc25..37e4a94 100644
--- a/gcc/symtab.c
+++ b/gcc/symtab.c
@@ -168,6 +168,11 @@ symbol_table::insert_to_assembler_name_hash (symtab_node *node,
tree name = DECL_ASSEMBLER_NAME (node->decl);
+ /* C++ FE can produce decls without associated assembler name and insert
+ them to symtab to hold section or TLS information. */
+ if (!name)
+ return;
+
hashval_t hash = decl_assembler_name_hash (name);
aslot = assembler_name_hash->find_slot_with_hash (name, hash, INSERT);
gcc_assert (*aslot != node);
@@ -209,6 +214,10 @@ symbol_table::unlink_from_assembler_name_hash (symtab_node *node,
{
tree name = DECL_ASSEMBLER_NAME (node->decl);
symtab_node **slot;
+
+ if (!name)
+ return;
+
hashval_t hash = decl_assembler_name_hash (name);
slot = assembler_name_hash->find_slot_with_hash (name, hash,
NO_INSERT);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index bc4e0da..9592747 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,4 +1,9 @@
-2014-12-14 Jan HUbicka <hubicka@ucw.cz>
+2014-12-14 Jan Hubicka <hubicka@ucw.cz>
+
+ PR ipa/61558
+ * g++.dg/torture/pr61558.C: New testcase.
+
+2014-12-14 Jan Hubicka <hubicka@ucw.cz>
PR lto/64043
* g++.dg/lto/pr64043_0.C: New testcase.
diff --git a/gcc/testsuite/g++.dg/torture/pr61558.C b/gcc/testsuite/g++.dg/torture/pr61558.C
new file mode 100644
index 0000000..1e398e9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr61558.C
@@ -0,0 +1,6 @@
+// { dg-do compile }
+static __typeof 0 a __attribute__ ((__weakref__ ("")));
+template <typename> class A
+{
+ static __thread int b;
+};