diff options
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/decl.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/crash81.C | 3 |
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" } }; |