aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Reichelt <reichelt@igpm.rwth-aachen.de>2006-05-22 16:49:33 +0000
committerVolker Reichelt <reichelt@gcc.gnu.org>2006-05-22 16:49:33 +0000
commit123b24e73b5ffc38f548cccfde0aea45b4797c51 (patch)
tree27bdb1a74e3811e586d7201b8711d0ecf0a3e251
parentba5719d9cd094d0f737bef6ee396387f65ff9195 (diff)
downloadgcc-123b24e73b5ffc38f548cccfde0aea45b4797c51.zip
gcc-123b24e73b5ffc38f548cccfde0aea45b4797c51.tar.gz
gcc-123b24e73b5ffc38f548cccfde0aea45b4797c51.tar.bz2
re PR c++/27451 (ICE with invalid asm statement)
PR c++/27451 * stmt.c (expand_asm_operands): Skip asm statement with erroneous clobbers. * g++.dg/ext/asm9.C: New test. From-SVN: r113985
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/stmt.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ext/asm9.C7
4 files changed, 23 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e1e61a5..5ae866d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-05-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/27451
+ * stmt.c (expand_asm_operands): Skip asm statement with erroneous
+ clobbers.
+
2006-05-22 Richard Sandiford <richard@codesourcery.com>
PR rtl-optimization/25514
diff --git a/gcc/stmt.c b/gcc/stmt.c
index be3e876..1937453 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -693,7 +693,11 @@ expand_asm_operands (tree string, tree outputs, tree inputs,
CLEAR_HARD_REG_SET (clobbered_regs);
for (tail = clobbers; tail; tail = TREE_CHAIN (tail))
{
- const char *regname = TREE_STRING_POINTER (TREE_VALUE (tail));
+ const char *regname;
+
+ if (TREE_VALUE (tail) == error_mark_node)
+ return;
+ regname = TREE_STRING_POINTER (TREE_VALUE (tail));
i = decode_reg_name (regname);
if (i >= 0 || i == -4)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c7a4eb2..89b9a02 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-05-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/27451
+ * g++.dg/ext/asm9.C: New test.
+
2006-05-22 Richard Sandiford <richard@codesourcery.com>
PR rtl-optimization/25514
diff --git a/gcc/testsuite/g++.dg/ext/asm9.C b/gcc/testsuite/g++.dg/ext/asm9.C
new file mode 100644
index 0000000..9daa01b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/asm9.C
@@ -0,0 +1,7 @@
+// PR 27451
+// { dg-do compile }
+
+void foo()
+{
+ asm("" ::: X); // { dg-error "before" }
+}