From: Volker Reichelt Date: Mon, 22 May 2006 16:53:38 +0000 (+0000) Subject: re PR c++/27451 (ICE with invalid asm statement) X-Git-Tag: releases/gcc-4.0.4~672 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9de1135bff9703e535780de7e7ed457137731dd7;p=thirdparty%2Fgcc.git 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: r113986 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bcf3002df868..1aad6d82eda3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-05-22 Volker Reichelt + + PR c++/27451 + * stmt.c (expand_asm_operands): Skip asm statement with erroneous + clobbers. + 2006-05-15 Roger Sayle PR rtl-optimization/22563 diff --git a/gcc/stmt.c b/gcc/stmt.c index db36c699afd1..5dd5e82d115f 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -664,7 +664,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 0ed0913452ce..fd9901b5e5f7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-05-22 Volker Reichelt + + PR c++/27451 + * g++.dg/ext/asm9.C: New test. + 2006-05-15 Roger Sayle PR middle-end/26729 diff --git a/gcc/testsuite/g++.dg/ext/asm9.C b/gcc/testsuite/g++.dg/ext/asm9.C new file mode 100644 index 000000000000..9daa01bbf5f9 --- /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" } +}