aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-08-24 08:54:49 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2007-08-24 08:54:49 +0200
commitaffb3cb2002b1e238f0ae6188742c543934ea270 (patch)
treedd98437472465f7e06230b9c3d2e98132cad1ac9 /gcc
parent14693275ea1f820b54c6ae9a46be627d267566ec (diff)
downloadgcc-affb3cb2002b1e238f0ae6188742c543934ea270.zip
gcc-affb3cb2002b1e238f0ae6188742c543934ea270.tar.gz
gcc-affb3cb2002b1e238f0ae6188742c543934ea270.tar.bz2
re PR c++/32567 (ICE on invalid use of parameter pack)
PR c++/32567 * typeck.c (build_unary_op) <case PREINCREMENT_EXPR>: Return error_mark_node right away if build_expr_type_conversion returned it. * g++.dg/parse/crash36.C: New test. From-SVN: r127760
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/typeck.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/parse/crash36.C11
4 files changed, 23 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index e39c0a1..6e5a358 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,10 @@
2007-08-24 Jakub Jelinek <jakub@redhat.com>
+ PR c++/32567
+ * typeck.c (build_unary_op) <case PREINCREMENT_EXPR>: 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 f019608..dce4d59 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 8fb4613..e4b7ed2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-08-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/32567
+ * g++.dg/parse/crash36.C: New test.
+
2007-08-23 H.J. Lu <hongjiu.lu@intel.com>
* 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 0000000..1e5ab8f
--- /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 <typename... T> 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 <int>::i]; // { dg-error "is not an integral constant-expression" }