aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2017-10-17 15:42:19 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2017-10-17 15:42:19 +0000
commit816c4ba228ea728c3e07161528b8781d61e9af7f (patch)
tree1b43748ad2550e4903e72fa1abe9d046f47f6488
parentf419fd1f8fcb77978b70225f670167a91b323893 (diff)
downloadgcc-816c4ba228ea728c3e07161528b8781d61e9af7f.zip
gcc-816c4ba228ea728c3e07161528b8781d61e9af7f.tar.gz
gcc-816c4ba228ea728c3e07161528b8781d61e9af7f.tar.bz2
[PATCH, middle-end/82577] Fix DECL_ASSEMBLER_NAME ICE
https://gcc.gnu.org/ml/gcc-patches/2017-10/msg01067.html gcc/ PR middle-end/82577 * alias.c (compare_base_decls): Check HAS_DECL_ASSEMBLER_NAME_P, use DECL_ASSEMBLER_NAME_RAW. gcc/testsuite/ PR middle-end/82577 * g++.dg/opt/pr82577.C: New. From-SVN: r253819
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/alias.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/opt/pr82577.C17
4 files changed, 30 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 02d8e31..14f0d01 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2017-10-17 Nathan Sidwell <nathan@acm.org>
+ PR middle-end/82577
+ * alias.c (compare_base_decls): Check HAS_DECL_ASSEMBLER_NAME_P,
+ use DECL_ASSEMBLER_NAME_RAW.
+
PR middle-end/82546
* tree.c (tree_code_size): Reformat. Punt to lang hook for unknown
TYPE nodes.
diff --git a/gcc/alias.c b/gcc/alias.c
index e486572..cb57c6a 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -2047,13 +2047,15 @@ compare_base_decls (tree base1, tree base2)
return 1;
/* If we have two register decls with register specification we
- cannot decide unless their assembler name is the same. */
+ cannot decide unless their assembler names are the same. */
if (DECL_REGISTER (base1)
&& DECL_REGISTER (base2)
+ && HAS_DECL_ASSEMBLER_NAME_P (base1)
+ && HAS_DECL_ASSEMBLER_NAME_P (base2)
&& DECL_ASSEMBLER_NAME_SET_P (base1)
&& DECL_ASSEMBLER_NAME_SET_P (base2))
{
- if (DECL_ASSEMBLER_NAME (base1) == DECL_ASSEMBLER_NAME (base2))
+ if (DECL_ASSEMBLER_NAME_RAW (base1) == DECL_ASSEMBLER_NAME_RAW (base2))
return 1;
return -1;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index bf9f4f3..694c23b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-10-17 Nathan Sidwell <nathan@acm.org>
+
+ PR middle-end/82577
+ * g++.dg/opt/pr82577.C: New.
+
2017-10-17 Qing Zhao <qing.zhao@oracle.com>
Wilco Dijkstra <wilco.dijkstra@arm.com>
diff --git a/gcc/testsuite/g++.dg/opt/pr82577.C b/gcc/testsuite/g++.dg/opt/pr82577.C
new file mode 100644
index 0000000..73ae0f5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr82577.C
@@ -0,0 +1,17 @@
+// { dg-additional-options "-O2" }
+// PR c++/82577 ICE when optimizing
+
+class a {
+public:
+ int *b();
+};
+struct c {
+ int d;
+ a e;
+} f;
+void fn1(register c *g) {
+ register int *h;
+ do
+ (h) = g->e.b() + (g)->d;
+ while (&f);
+}