From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1734) id 260C83858D39; Thu, 2 Dec 2021 13:12:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 260C83858D39 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Marek Polacek To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-5710] c++: ICE with unnamed tparm and concept [PR103408] X-Act-Checkin: gcc X-Git-Author: Marek Polacek X-Git-Refname: refs/heads/trunk X-Git-Oldrev: 06b8cdc8d7339ac44802044ef148dd86874333d8 X-Git-Newrev: 6f43a8a08053a871e785e2ebc80383e0849efb6f Message-Id: <20211202131204.260C83858D39@sourceware.org> Date: Thu, 2 Dec 2021 13:12:04 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Dec 2021 13:12:04 -0000 https://gcc.gnu.org/g:6f43a8a08053a871e785e2ebc80383e0849efb6f commit r12-5710-g6f43a8a08053a871e785e2ebc80383e0849efb6f Author: Marek Polacek Date: Tue Nov 30 16:43:19 2021 -0500 c++: ICE with unnamed tparm and concept [PR103408] Here we crash when issuing the "constraint C has type T, not bool" error, because pp_cxx_parameter_mapping wasn't prepared to see an anonymous template parameter. With this patch we print error: constraint 'auto() [with = 0]' has type '', not 'bool' The "" is what this patch adds. PR c++/103408 gcc/cp/ChangeLog: * cxx-pretty-print.c (pp_cxx_parameter_mapping): Print "" rather than crash on an unnamed template parameter. gcc/testsuite/ChangeLog: * g++.dg/cpp23/concepts-err1.C: New test. Diff: --- gcc/cp/cxx-pretty-print.c | 4 +++- gcc/testsuite/g++.dg/cpp23/concepts-err1.C | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c index 25cabfee39f..3ea357deb80 100644 --- a/gcc/cp/cxx-pretty-print.c +++ b/gcc/cp/cxx-pretty-print.c @@ -2891,8 +2891,10 @@ pp_cxx_parameter_mapping (cxx_pretty_printer *pp, tree map) if (TYPE_P (parm)) pp->type_id (parm); + else if (tree name = DECL_NAME (TEMPLATE_PARM_DECL (parm))) + pp_cxx_tree_identifier (pp, name); else - pp_cxx_tree_identifier (pp, DECL_NAME (TEMPLATE_PARM_DECL (parm))); + pp->translate_string (""); pp_cxx_whitespace (pp); pp_equal (pp); diff --git a/gcc/testsuite/g++.dg/cpp23/concepts-err1.C b/gcc/testsuite/g++.dg/cpp23/concepts-err1.C new file mode 100644 index 00000000000..e5bdc542bad --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp23/concepts-err1.C @@ -0,0 +1,6 @@ +// PR c++/103408 +// { dg-do compile { target c++23 } } + +template +concept C = auto([]{}); // { dg-error "constraint" } +static_assert(C<0>); // { dg-error "non-constant condition for static assertion" }