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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org,
                   |                            |jason at gcc dot gnu.org
     Ever confirmed|0                           |1
            Summary|[14/15/16 Regression] ICE   |[14/15/16 Regression] ICE
                   |in write_expression         |in write_expression
                   |(mangle.cc) with requires   |(mangle.cc) with requires
                   |expression in lambda        |expression in lambda
                   |trailing return type        |trailing return type since
                   |                            |r14-6064
             Status|UNCONFIRMED                 |NEW
           Priority|P3                          |P2
   Last reconfirmed|                            |2026-01-21

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
namespace std {
 template<bool, typename _Tp = void>
    struct enable_if
    { };

  template<typename _Tp>
    struct enable_if<true, _Tp>
    { using type = _Tp; };

  template<bool _Cond, typename _Tp = void>
    using enable_if_t = typename enable_if<_Cond, _Tp>::type;
}
template <typename T> void unresolved_func(T t);
int main() {
  auto lambda =
      []<typename T>(T t) -> std::enable_if_t < requires(T t) {
    unresolved_func(t);
  }
  > {};
  lambda(42);
}

This changed from a sorry into ICE in
r14-6064-gc3f281a0c1ca50e4df5049923aa2f5d1c3c39ff6

/opt/notnfs/gcc-bisect/obj/gcc/cc1plus.r14-6063 -quiet -quiet -std=c++23
pr123699.C
pr123699.C: In instantiation of ‘main()::<lambda(T)> [with T = int]’:
pr123699.C:16:7:   required from here
   16 |       []<typename T>(T t) -> std::enable_if_t < requires(T t) {
      |       ^
pr123699.C:16:7: sorry, unimplemented: mangling requires_expr
pr123699.C: In instantiation of ‘main()::<lambda(T)> [with T = int]’:
pr123699.C:16:7:   required from here
pr123699.C:16:7: sorry, unimplemented: mangling requires_expr
/opt/notnfs/gcc-bisect/obj/gcc/cc1plus.r14-6064 -quiet -quiet -std=c++23
pr123699.C
pr123699.C: In instantiation of ‘main()::<lambda(T)> [with T = int]’:
pr123699.C:16:7:   required from here
   16 |       []<typename T>(T t) -> std::enable_if_t < requires(T t) {
      |       ^
pr123699.C:16:7: internal compiler error: in write_expression, at
cp/mangle.cc:3398
0x5f399b write_expression
        ../../gcc/cp/mangle.cc:3398
0x5f6b5c write_expression
        ../../gcc/cp/mangle.cc:3831
0x5f2101 write_requirement
        ../../gcc/cp/mangle.cc:3090
0x5f2710 write_requires_expr
        ../../gcc/cp/mangle.cc:3142
0x5f6377 write_expression
        ../../gcc/cp/mangle.cc:3724
0x5f84d2 write_template_arg
        ../../gcc/cp/mangle.cc:4102
0x5f2ae1 write_template_args
        ../../gcc/cp/mangle.cc:3205
0x5e7aac write_prefix
        ../../gcc/cp/mangle.cc:1329
0x5e7623 write_nested_name
        ../../gcc/cp/mangle.cc:1259
0x5eed36 write_type
        ../../gcc/cp/mangle.cc:2509
0x5f1b5b write_bare_function_type
        ../../gcc/cp/mangle.cc:2992
0x5e5cf4 write_encoding
        ../../gcc/cp/mangle.cc:949
0x5e503e write_mangled_name
        ../../gcc/cp/mangle.cc:810
0x5f962e mangle_decl_string
        ../../gcc/cp/mangle.cc:4383
0x5f967e get_mangled_id
        ../../gcc/cp/mangle.cc:4404
0x5f99bc mangle_decl(tree_node*)
        ../../gcc/cp/mangle.cc:4442
0x14d0dbf decl_assembler_name(tree_node*)
        ../../gcc/tree.cc:719
0x14d1383 assign_assembler_name_if_needed(tree_node*)
        ../../gcc/tree.cc:834
0xa4b4d4 cgraph_node::analyze()
        ../../gcc/cgraphunit.cc:677
0xa4d5aa analyze_functions
        ../../gcc/cgraphunit.cc:1247
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

Reply via email to