diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-03-27 21:58:30 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-03-27 21:58:30 +0200 |
commit | dc442cef60468a813ab2abee691280089a5e5b7f (patch) | |
tree | c6481074b4fa535349b523ac960bba2e14aadde4 | |
parent | ef22816c3b3f580addc60df340abda46cc6ba01c (diff) | |
download | gcc-dc442cef60468a813ab2abee691280089a5e5b7f.zip gcc-dc442cef60468a813ab2abee691280089a5e5b7f.tar.gz gcc-dc442cef60468a813ab2abee691280089a5e5b7f.tar.bz2 |
re PR c++/85076 (ICE with invalid template used as lambda argument)
PR c++/85076
* tree.c (cp_build_reference_type): If to_type is error_mark_node,
return it right away.
* g++.dg/cpp1y/pr85076.C: New test.
From-SVN: r258901
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/tree.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/pr85076.C | 6 |
4 files changed, 20 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f7f4887..b410f3d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2018-03-27 Jakub Jelinek <jakub@redhat.com> + + PR c++/85076 + * tree.c (cp_build_reference_type): If to_type is error_mark_node, + return it right away. + 2018-03-27 Volker Reichelt <v.reichelt@netcologne.de> * search.c (check_final_overrider): Use inform instead of error diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index f1a90bd..0355b9e 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1078,6 +1078,9 @@ cp_build_reference_type (tree to_type, bool rval) { tree lvalue_ref, t; + if (to_type == error_mark_node) + return error_mark_node; + if (TREE_CODE (to_type) == REFERENCE_TYPE) { rval = rval && TYPE_REF_IS_RVALUE (to_type); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b8d56f8..9cd81d9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-03-27 Jakub Jelinek <jakub@redhat.com> + + PR c++/85076 + * g++.dg/cpp1y/pr85076.C: New test. + 2018-03-27 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/85084 diff --git a/gcc/testsuite/g++.dg/cpp1y/pr85076.C b/gcc/testsuite/g++.dg/cpp1y/pr85076.C new file mode 100644 index 0000000..6d54dea --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/pr85076.C @@ -0,0 +1,6 @@ +// PR c++/85076 +// { dg-do compile { target c++14 } } + +template<typename> struct A*; // { dg-error "expected unqualified-id before" } + +auto a = [](A<auto>) {}; // { dg-error "is not a template|has incomplete type" } |