diff options
author | Marek Polacek <polacek@redhat.com> | 2021-11-30 16:43:19 -0500 |
---|---|---|
committer | Marek Polacek <polacek@redhat.com> | 2021-12-02 08:11:39 -0500 |
commit | 6f43a8a08053a871e785e2ebc80383e0849efb6f (patch) | |
tree | c59b0a23922889efa133143f68a4d46ba1b0ae61 /gcc | |
parent | 06b8cdc8d7339ac44802044ef148dd86874333d8 (diff) | |
download | gcc-6f43a8a08053a871e785e2ebc80383e0849efb6f.zip gcc-6f43a8a08053a871e785e2ebc80383e0849efb6f.tar.gz gcc-6f43a8a08053a871e785e2ebc80383e0849efb6f.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/cxx-pretty-print.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp23/concepts-err1.C | 6 |
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c index 25cabfe..3ea357d 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 0000000..e5bdc54 --- /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" } |