public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-5710] c++: ICE with unnamed tparm and concept [PR103408]
@ 2021-12-02 13:12 Marek Polacek
  0 siblings, 0 replies; only message in thread
From: Marek Polacek @ 2021-12-02 13:12 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:6f43a8a08053a871e785e2ebc80383e0849efb6f

commit r12-5710-g6f43a8a08053a871e785e2ebc80383e0849efb6f
Author: Marek Polacek <polacek@redhat.com>
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(<lambda>) [with <unnamed> = 0]' has type '<lambda()>', not 'bool'
    
    The "<unnamed>" is what this patch adds.
    
            PR c++/103408
    
    gcc/cp/ChangeLog:
    
            * cxx-pretty-print.c (pp_cxx_parameter_mapping): Print "<unnamed>"
            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 ("<unnamed>");
 
       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<int>
+concept C = auto([]{}); // { dg-error "constraint" }
+static_assert(C<0>); // { dg-error "non-constant condition for static assertion" }


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-12-02 13:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-02 13:12 [gcc r12-5710] c++: ICE with unnamed tparm and concept [PR103408] Marek Polacek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).