From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2122) id 993043858C60; Fri, 10 Mar 2023 18:49:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 993043858C60 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1678474192; bh=xI73ASEG+IKcilmRN15RyEbNlwQa+w4LT70TP+9B2l0=; h=From:To:Subject:Date:From; b=dLS6tbOSsWUI/2mAgZiJiFAB31R2irbyjgijAI6KmToAMC48I/mJV/dpGVCzhrN96 lotJLNCDTqzmG9tQUIQBDZx/G4rLhpLMwMgK4SYDdunx4lXM0HclgcoJYGh25AYt// B8O23y+WaeXt7WaPp236StnI8Kv5GrccuHtgPAuQ= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jason Merrill To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-6594] c++: constrained lambda error-recovery [PR108972] X-Act-Checkin: gcc X-Git-Author: Jason Merrill X-Git-Refname: refs/heads/trunk X-Git-Oldrev: 4d0baeae315ebe7d0ec7682ea3e7c0516027c2b8 X-Git-Newrev: a915c29a7d63ccb88cfded75ba1c8c4919845e98 Message-Id: <20230310184952.993043858C60@sourceware.org> Date: Fri, 10 Mar 2023 18:49:52 +0000 (GMT) List-Id: https://gcc.gnu.org/g:a915c29a7d63ccb88cfded75ba1c8c4919845e98 commit r13-6594-ga915c29a7d63ccb88cfded75ba1c8c4919845e98 Author: Jason Merrill Date: Thu Mar 9 17:01:48 2023 -0500 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. Diff: --- gcc/cp/lambda.cc | 4 ++++ 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 c752622816d..212990a21bf 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 291e451ca1a..b18e6b62aa4 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 concept C1 = __is_same_as(T, int) @@ -61,4 +62,3 @@ int main(int, char**) return 0; } -