From: Jakub Jelinek Date: Fri, 24 Aug 2007 06:54:49 +0000 (+0200) Subject: re PR c++/32567 (ICE on invalid use of parameter pack) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=affb3cb2002b1e238f0ae6188742c543934ea270;p=gcc.git re PR c++/32567 (ICE on invalid use of parameter pack) PR c++/32567 * typeck.c (build_unary_op) : Return error_mark_node right away if build_expr_type_conversion returned it. * g++.dg/parse/crash36.C: New test. From-SVN: r127760 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e39c0a1b695..6e5a358f436 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2007-08-24 Jakub Jelinek + PR c++/32567 + * typeck.c (build_unary_op) : Return + error_mark_node right away if build_expr_type_conversion + returned it. + PR c++/32898 * name-lookup.c (set_decl_namespace): lookup_qualified_name failure is error_mark_node rather than NULL_TREE. diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index f0196088219..dce4d590c96 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -4259,6 +4259,8 @@ build_unary_op (enum tree_code code, tree xarg, int noconvert) errstring ="no post-decrement operator for type"; break; } + else if (arg == error_mark_node) + return error_mark_node; /* Report something read-only. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8fb461340b4..e4b7ed24eb5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-08-24 Jakub Jelinek + + PR c++/32567 + * g++.dg/parse/crash36.C: New test. + 2007-08-23 H.J. Lu * gcc.dg/pr32721.c: Updated. diff --git a/gcc/testsuite/g++.dg/parse/crash36.C b/gcc/testsuite/g++.dg/parse/crash36.C new file mode 100644 index 00000000000..1e5ab8f2562 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/crash36.C @@ -0,0 +1,11 @@ +// PR c++/32567 +// { dg-do compile } +// { dg-options "-std=c++98" } + +template struct A // { dg-error "does not include variadic templates" } +{ + static T &t; // { dg-error "not expanded with|T" } + static const int i = sizeof (++t); // { dg-error "invalid use of template type parameter" } +}; + +int x[A ::i]; // { dg-error "is not an integral constant-expression" }