aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/decl.c7
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/template/crash81.C3
4 files changed, 16 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index b72b22f..bb0385d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2015-07-21 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * decl.c (grokdeclarator): For an erroneous template parameter
+ propagate error_mark_node as type.
+
2015-07-20 Marek Polacek <polacek@redhat.com>
PR c++/55095
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index db8b1aa..01b8120 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -9315,7 +9315,12 @@ grokdeclarator (const cp_declarator *declarator,
warning (OPT_Wreturn_type,
"ISO C++ forbids declaration of %qs with no type", name);
- type = integer_type_node;
+ if (type_was_error_mark_node && template_parm_flag)
+ /* FIXME we should be able to propagate the error_mark_node as is
+ for other contexts too. */
+ type = error_mark_node;
+ else
+ type = integer_type_node;
}
ctype = NULL_TREE;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 16d1caf..749b04f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2015-07-21 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * g++.dg/template/crash81.C: Update.
+
2015-07-21 Vladimir Makarov <vmakarov@redhat.com>
PR ipa/66424.
diff --git a/gcc/testsuite/g++.dg/template/crash81.C b/gcc/testsuite/g++.dg/template/crash81.C
index 54efba6..c0ea37f 100644
--- a/gcc/testsuite/g++.dg/template/crash81.C
+++ b/gcc/testsuite/g++.dg/template/crash81.C
@@ -2,6 +2,5 @@
struct A
{
- template<T::X> struct X; // { dg-error "'T' has not been declared" "T" }
- // { dg-bogus "declaration" "" { xfail *-*-* } 5 }
+ template<T::X> struct X; // { dg-error "'T' has not been declared" }
};