aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Schmidt <bschmidt@redhat.com>2016-01-07 12:17:39 +0000
committerBernd Schmidt <bschmidt@redhat.com>2016-01-07 12:17:39 +0000
commit1cf4ebdb2dc56fb2b8db49904e6dceac731c57a7 (patch)
tree95a4fa39ad8cc714d4165a4489fe0289d2b92704
parent11acdb27cf81b6116ec151a158bc63907b236e0b (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/ChangeLog4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/c-c++-common/pr67639.c8
-rw-r--r--gcc/varasm.c3
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).