https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119385

            Bug ID: 119385
           Summary: internal compiler error when referencing parameters in
                    require clauses in lambda expressions
           Product: gcc
           Version: 14.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: liuxf19 at 163 dot com
  Target Milestone: ---

The following code:

void func() {
    [](auto x) requires requires {
        []<int = 0>(int = x) {}();
    } {}(0);
}

when compiling with GCC 14.2.0 with:

$ g++ -std=c++20 -fconcepts-diagnostics-depth=5 -freport-bug

g++ gives the following errors:

<source>: In substitution of 'template<class auto:1> func()::<lambda(auto:1)>
[with auto:1 = int]':
<source>:4:9:   required from here
    2 |     [](auto x) requires requires {
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    3 |         []<int = 0>(int = x) {}();
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~
    4 |     } {}(0);
      |     ~~~~^~~
<source>:3:32: internal compiler error: in tsubst_expr, at cp/pt.cc:21462
    3 |         []<int = 0>(int = x) {}();
      |         ~~~~~~~~~~~~~~~~~~~~~~~^~
0x2031cbc internal_error(char const*, ...)
        ???:0
0x77895f fancy_abort(char const*, int, char const*)
        ???:0
0x92ee22 tsubst_default_argument(tree_node*, int, tree_node*, tree_node*, int)
        ???:0
0x793d8b convert_default_arg(tree_node*, tree_node*, tree_node*, int, int)
        ???:0
0x7a2143 build_op_call(tree_node*, vec<tree_node*, va_gc, vl_embed>**, int)
        ???:0
0x960f6f finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool,
bool, int)
        ???:0
0x7dc7d6 tsubst_requires_expr(tree_node*, tree_node*, int, tree_node*)
        ???:0
0x7ddec8 constraints_satisfied_p(tree_node*, tree_node*)
        ???:0
0x94aedc fn_type_unification(tree_node*, tree_node*, tree_node*, tree_node*
const*, unsigned int, tree_node*, unification_kind_t, int, conversion**, bool,
bool)
        ???:0
0x7a1d01 build_op_call(tree_node*, vec<tree_node*, va_gc, vl_embed>**, int)
        ???:0
0x960f6f finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool,
bool, int)
        ???:0
0x90ee14 c_parse_file()
        ???:0
0xa0d1b9 c_common_parse_file()
        ???:0


The error in this code should be that the function parameter x is incorrectly
used as a default argument, but the compiler crashed instead of reporting this
error.

Reply via email to