diff options
author | Bernd Schmidt <bschmidt@redhat.com> | 2016-01-07 12:17:39 +0000 |
---|---|---|
committer | Bernd Schmidt <bschmidt@redhat.com> | 2016-01-07 12:17:39 +0000 |
commit | 1cf4ebdb2dc56fb2b8db49904e6dceac731c57a7 (patch) | |
tree | 95a4fa39ad8cc714d4165a4489fe0289d2b92704 | |
parent | 11acdb27cf81b6116ec151a158bc63907b236e0b (diff) |
Fix SSA inconsistencies with invalid asm reg names (PR67639)
PR middle-end/67639
* varasm.c (make_decl_rtl): Mark invalid register vars as
DECL_EXTERNAL.
testsuite/
PR middle-end/67639
* c-c++-common/pr67639.c: New test.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@232125 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/pr67639.c | 8 | ||||
-rw-r--r-- | gcc/varasm.c | 3 |
4 files changed, 20 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 62ad1590969..21a95fd1ca4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2015-12-15 Bernd Schmidt <bschmidt@redhat.com> + PR middle-end/67639 + * varasm.c (make_decl_rtl): Mark invalid register vars as + DECL_EXTERNAL. + PR rtl-optimization/66206 * bt-load.c (find_btr_use): Change first arg to be a pointer to an rtx. All callers changed. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e21b7188c4f..29894213bcc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-12-15 Bernd Schmidt <bschmidt@redhat.com> + + PR middle-end/67639 + * c-c++-common/pr67639.c: New test. + 2016-01-07 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/69141 diff --git a/gcc/testsuite/c-c++-common/pr67639.c b/gcc/testsuite/c-c++-common/pr67639.c new file mode 100644 index 00000000000..aa19ba4eda3 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr67639.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +void +foo (int p) +{ + int t; + register long x asm ("rhubarb") = p; /* { dg-error "register name" } */ + __asm ("" : "=r" (t), "=r" (t), "=r" (t), "=r" (x) : "0" (x)); +} diff --git a/gcc/varasm.c b/gcc/varasm.c index e0c1fd89f26..3a3573e5395 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -1420,6 +1420,9 @@ make_decl_rtl (tree decl) specifications. */ SET_DECL_ASSEMBLER_NAME (decl, NULL_TREE); DECL_HARD_REGISTER (decl) = 0; + /* Also avoid SSA inconsistencies by pretending this is an external + decl now. */ + DECL_EXTERNAL (decl) = 1; return; } /* Now handle ordinary static variables and functions (in memory). |