From: Volker Reichelt Date: Fri, 14 Jul 2006 09:53:14 +0000 (+0000) Subject: re PR c++/28343 (ICE with invalid asm specifier for struct member) X-Git-Tag: releases/gcc-4.0.4~532 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=449ecd4bcb13c64b0e745ebbc94c22214d058074;p=thirdparty%2Fgcc.git 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: r115438 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5dd905fbdf9b..69b83d4efe09 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 Steve Ellcey PR c++/28114 @@ -6,11 +12,11 @@ 2006-07-11 Lee Millward PR c++/28051 - * mangle.c (mangle_conv_op_name_for_type): Check for - invalid types. - * name-lookup.c (push_class_level_binding): Robustify. - (do_class_using_decl): Return early if name is - error_mark_node. + * mangle.c (mangle_conv_op_name_for_type): Check for + invalid types. + * name-lookup.c (push_class_level_binding): Robustify. + (do_class_using_decl): Return early if name is + error_mark_node. 2006-07-10 Jason Merrill @@ -18,7 +24,7 @@ 2006-07-08 Lee Millward Andrew Pinski - + PR c++/27820 * decl.c (define_label): Return error_mark_node on error. * semantics.c (finish_label_stmt): Don't call diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 4fc6d624bc38..af1407c728ad 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -4752,7 +4752,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 (init && TREE_CODE (init) == NAMESPACE_DECL) diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 7aa7af9b1302..776d8baabdaa 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -900,7 +900,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 088a3af63340..919074d932e0 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-12 Steve Ellcey PR c++/28114 diff --git a/gcc/testsuite/g++.dg/ext/asmspec1.C b/gcc/testsuite/g++.dg/ext/asmspec1.C new file mode 100644 index 000000000000..3df2483ad537 --- /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" } +};