diff options
author | Jason Merrill <jason@redhat.com> | 2023-03-09 17:01:48 -0500 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2023-03-10 13:49:45 -0500 |
commit | a915c29a7d63ccb88cfded75ba1c8c4919845e98 (patch) | |
tree | 20cb58c518a09c09063a761cfcb542a59234853c | |
parent | 4d0baeae315ebe7d0ec7682ea3e7c0516027c2b8 (diff) | |
download | gcc-a915c29a7d63ccb88cfded75ba1c8c4919845e98.zip gcc-a915c29a7d63ccb88cfded75ba1c8c4919845e98.tar.gz gcc-a915c29a7d63ccb88cfded75ba1c8c4919845e98.tar.bz2 |
c++: constrained lambda error-recovery [PR108972]
Better not to ICE after various valid errors.
PR c++/108972
gcc/cp/ChangeLog:
* lambda.cc (compare_lambda_template_head): Check more
for error_mark_node.
gcc/testsuite/ChangeLog:
* g++.dg/cpp2a/concepts-lambda3.C: Run at lower std levels,
but expect errors.
-rw-r--r-- | gcc/cp/lambda.cc | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp2a/concepts-lambda3.C | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/gcc/cp/lambda.cc b/gcc/cp/lambda.cc index c752622..212990a 100644 --- a/gcc/cp/lambda.cc +++ b/gcc/cp/lambda.cc @@ -1537,6 +1537,8 @@ compare_lambda_template_head (tree tmpl_a, tree tmpl_b) if (parm_a == error_mark_node) return false; parm_a = TREE_VALUE (parm_a); + if (parm_a == error_mark_node) + return false; if (DECL_VIRTUAL_P (parm_a)) parm_a = NULL_TREE; } @@ -1548,6 +1550,8 @@ compare_lambda_template_head (tree tmpl_a, tree tmpl_b) if (parm_b == error_mark_node) return false; parm_b = TREE_VALUE (parm_b); + if (parm_b == error_mark_node) + return false; if (DECL_VIRTUAL_P (parm_b)) parm_b = NULL_TREE; } diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-lambda3.C b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda3.C index 291e451..b18e6b6 100644 --- a/gcc/testsuite/g++.dg/cpp2a/concepts-lambda3.C +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda3.C @@ -1,4 +1,5 @@ -// { dg-do run { target c++20 } } +// { dg-do run } +// { dg-excess-errors "" { target { ! concepts } } } (PR108972) template<typename T> concept C1 = __is_same_as(T, int) @@ -61,4 +62,3 @@ int main(int, char**) return 0; } - |