https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94597
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Known to fail| |10.0 CC| |jason at gcc dot gnu.org, | |marxin at gcc dot gnu.org Keywords| |ice-on-valid-code Ever confirmed|0 |1 Summary|ICE while using a concept |[10 Regression] ICE while |checking for user defined |using a concept checking |conversion operator |for user defined conversion | |operator since | |r10-3735-gcb57504a55015891 Known to work| |9.3.0 Target Milestone|--- |10.0 Status|UNCONFIRMED |NEW Last reconfirmed| |2020-04-15 --- Comment #1 from Martin Liška <marxin at gcc dot gnu.org> --- Confirmed, started with r10-3735-gcb57504a55015891. Reduced test-case: $ cat pr94597.ii template <typename b, typename c> concept d = requires(b e) { e.operator c; }; template <typename f, typename g> requires(d<f, g>) bool equal(f, g); template <typename h> struct i { i(h); operator h(); }; bool fun() { i a(2.0f); return equal(a, 3.0f); } $ g++ -std=c++2a -fconcepts pr94597.ii -c pr94597.ii: In instantiation of ‘bool equal(f, g) [with f = i<float>; g = float]’: pr94597.ii:9:23: required from here pr94597.ii:1:74: internal compiler error: tree check: accessed elt 2 of ‘tree_vec’ with 1 elts in tsubst, at cp/pt.c:15175 1 | template <typename b, typename c> concept d = requires(b e) { e.operator c; }; | ~~~~~~~~~~~^ 0x84239d tree_vec_elt_check_failed(int, int, char const*, int, char const*) /home/marxin/Programming/gcc/gcc/tree.c:9928 0x6a6a8b tree_vec_elt_check(tree_node*, int, char const*, int, char const*) /home/marxin/Programming/gcc/gcc/tree.h:3508 0x6a6a8b tsubst(tree_node*, tree_node*, int, tree_node*) /home/marxin/Programming/gcc/gcc/cp/pt.c:15175 0xab6c3b tsubst_copy /home/marxin/Programming/gcc/gcc/cp/pt.c:16821 0xabd7e4 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) /home/marxin/Programming/gcc/gcc/cp/pt.c:20125 0xab0677 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) /home/marxin/Programming/gcc/gcc/cp/pt.c:18690 0x982f25 tsubst_valid_expression_requirement /home/marxin/Programming/gcc/gcc/cp/constraint.cc:1867 0x982f25 tsubst_simple_requirement /home/marxin/Programming/gcc/gcc/cp/constraint.cc:1880 0x982f25 tsubst_requirement /home/marxin/Programming/gcc/gcc/cp/constraint.cc:2032 0x982f25 tsubst_requirement_body /home/marxin/Programming/gcc/gcc/cp/constraint.cc:2054 0x982f25 tsubst_requires_expr(tree_node*, tree_node*, int, tree_node*) /home/marxin/Programming/gcc/gcc/cp/constraint.cc:2170 0xabd8da tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) /home/marxin/Programming/gcc/gcc/cp/pt.c:20440 0xab0677 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) /home/marxin/Programming/gcc/gcc/cp/pt.c:18690 0x9829d8 satisfy_atom /home/marxin/Programming/gcc/gcc/cp/constraint.cc:2595 0x9829d8 satisfy_constraint_r /home/marxin/Programming/gcc/gcc/cp/constraint.cc:2657 0x982dd8 satisfy_constraint /home/marxin/Programming/gcc/gcc/cp/constraint.cc:2677 0x983f42 satisfy_declaration_constraints /home/marxin/Programming/gcc/gcc/cp/constraint.cc:2776 0x983f42 constraint_satisfaction_value /home/marxin/Programming/gcc/gcc/cp/constraint.cc:2812 0x9843fa constraints_satisfied_p(tree_node*) /home/marxin/Programming/gcc/gcc/cp/constraint.cc:2846 0x933368 add_function_candidate /home/marxin/Programming/gcc/gcc/cp/call.c:2288 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. $ g++-9 -std=c++2a -fconcepts pr94597.ii -c [ok]