diff options
author | Volker Reichelt <reichelt@igpm.rwth-aachen.de> | 2006-07-14 09:43:23 +0000 |
---|---|---|
committer | Volker Reichelt <reichelt@gcc.gnu.org> | 2006-07-14 09:43:23 +0000 |
commit | 4f543d151efddbd4c7944c9f87cad8b3321f6dc6 (patch) | |
tree | fbabf91cd6df3b094274ace02d6c968a1c097ee7 | |
parent | a7929aa4bd7517e8dc4d1eaa7b14d47670da7e0c (diff) | |
download | gcc-4f543d151efddbd4c7944c9f87cad8b3321f6dc6.zip gcc-4f543d151efddbd4c7944c9f87cad8b3321f6dc6.tar.gz gcc-4f543d151efddbd4c7944c9f87cad8b3321f6dc6.tar.bz2 |
re PR c++/28343 (ICE with invalid asm specifier for struct member)
PR c++/28343
* decl.c (cp_finish_decl): Check asmspec_tree for error_mark_node.
* decl2.c (grokfield): Likewise.
* g++.dg/ext/asmspec1.C: New test.
From-SVN: r115436
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl.c | 2 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/asmspec1.C | 8 |
5 files changed, 21 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index de1f4f1..d8b8652 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2006-07-14 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + + PR c++/28343 + * decl.c (cp_finish_decl): Check asmspec_tree for error_mark_node. + * decl2.c (grokfield): Likewise. + 2006-07-12 Geoffrey Keating <geoffk@apple.com> * decl2.c (determine_visibility): Don't change visibility of diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 1d5be58..b74a1a9 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -5056,7 +5056,7 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, /* If a name was specified, get the string. */ if (global_scope_p (current_binding_level)) asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree); - if (asmspec_tree) + if (asmspec_tree && asmspec_tree != error_mark_node) asmspec = TREE_STRING_POINTER (asmspec_tree); if (current_class_type diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 3a78c40..11c4901 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -837,7 +837,7 @@ grokfield (const cp_declarator *declarator, return void_type_node; } - if (asmspec_tree) + if (asmspec_tree && asmspec_tree != error_mark_node) asmspec = TREE_STRING_POINTER (asmspec_tree); if (init) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8b71199..fa86c81 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-07-14 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + + PR c++/28343 + * g++.dg/ext/asmspec1.C: New test. + 2006-07-13 Janis Johnson <janis187@us.ibm.com> * lib/gcc-dg.exp (tool_load): Wrapper to support shouldfail tests. diff --git a/gcc/testsuite/g++.dg/ext/asmspec1.C b/gcc/testsuite/g++.dg/ext/asmspec1.C new file mode 100644 index 0000000..3df2483 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/asmspec1.C @@ -0,0 +1,8 @@ +// PR c++/28343 +// { dg-do compile } + +struct A +{ + int i __asm__(int); // { dg-error "before" } + static int j __asm__(int); // { dg-error "before" } +}; |