From 4f543d151efddbd4c7944c9f87cad8b3321f6dc6 Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Fri, 14 Jul 2006 09:43:23 +0000 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl.c | 2 +- gcc/cp/decl2.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/ext/asmspec1.C | 8 ++++++++ 5 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ext/asmspec1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index de1f4f117a7..d8b8652f913 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2006-07-14 Volker Reichelt + + PR c++/28343 + * decl.c (cp_finish_decl): Check asmspec_tree for error_mark_node. + * decl2.c (grokfield): Likewise. + 2006-07-12 Geoffrey Keating * decl2.c (determine_visibility): Don't change visibility of diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 1d5be58e09f..b74a1a9bac6 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 3a78c40c223..11c4901cb3a 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 8b711994d3d..fa86c8121ca 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-07-14 Volker Reichelt + + PR c++/28343 + * g++.dg/ext/asmspec1.C: New test. + 2006-07-13 Janis Johnson * 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 00000000000..3df2483ad53 --- /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" } +};