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

            Bug ID: 102047
           Summary: ICE in template_parms_to_args passing lambda-quoted
                    constraint to meta-concept
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ed at catmur dot uk
  Target Milestone: ---

template<class> concept A = true;
template<class T, auto L> concept M = requires {
    L.template operator()<T()>();
};
template<class T> concept C = requires(T t) {
    { t.x } -> M<[]<A>(){}>;
};
struct S { double x; };
static_assert(C<S>);

g++
(Compiler-Explorer-Build-gcc-8ca7fa84a3af355c3e2bbda2acc61934c16078b2-binutils-2.36.1)
12.0.0 20210823 (experimental)

6:18: internal compiler error: Segmentation fault
    6 |     { t.x } -> M<[]<A>(){}>;
      |                  ^~~~~~~~~
0x1de2c99 internal_error(char const*, ...)
0x99d20d template_parms_to_args(tree_node*)
0x9e74ea tsubst_lambda_expr(tree_node*, tree_node*, int, tree_node*)
0x9db8d0 tsubst_template_arg(tree_node*, tree_node*, int, tree_node*)
0x7d702a constraints_satisfied_p(tree_node*, tree_node*)
0x9a6a67 do_auto_deduction(tree_node*, tree_node*, tree_node*, int,
auto_deduction_context, tree_node*, int)
0x7d6fe2 tsubst_requires_expr(tree_node*, tree_node*, int, tree_node*)
0x7d7088 evaluate_concept_check(tree_node*)
0x7c26f4 maybe_constant_value(tree_node*, tree_node*, bool)
0xa2b65d finish_static_assert(tree_node*, tree_node*, unsigned int, bool, bool)
0x980395 c_parse_file()
0xb05462 c_common_parse_file()

Clang also ICEs; MSVC accepts.

Possibly related to #99465.

Reply via email to