diff options
author | Nathan Sidwell <nathan@acm.org> | 2017-10-17 15:42:19 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2017-10-17 15:42:19 +0000 |
commit | 816c4ba228ea728c3e07161528b8781d61e9af7f (patch) | |
tree | 1b43748ad2550e4903e72fa1abe9d046f47f6488 | |
parent | f419fd1f8fcb77978b70225f670167a91b323893 (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/alias.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/pr82577.C | 17 |
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); +} |