https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104527
Bug ID: 104527 Summary: [11/12 Regression] ICE: tree check: accessed elt 1 of 'tree_vec' with 0 elts in hash, at cp/constraint.cc:2486 Product: gcc Version: 12.0 Status: UNCONFIRMED Keywords: ice-on-invalid-code Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: asolokha at gmx dot com CC: ppalka at gcc dot gnu.org Target Milestone: --- gcc 12.0.1 20220213 snapshot (g:58aeb75d4097010ad9bb72b964265b18ab284f93) ICEs when compiling the following testcase, reduced from test/SemaTemplate/instantiate-requires-expr.cpp from the clang 13.0.0 test suite, w/ -std=c++20 (or -fconcepts): template<typename T, typename U> constexpr bool is_same_v = false; namespace expr_requirement { template<typename T, typename U = int> concept C1 = is_same_v<T, U>; template<typename T> struct b { template<typename U> requires (requires { { 0 } -> C1<typename T::a>; }, false) struct r {}; }; using bri = b<int>::r<short>; } % g++-12.0.1 -fconcepts -c s6aywpah.cpp s6aywpah.cpp: In substitution of 'template<class T> template<class U> requires (requires{{0} -> decltype(auto) [requires expr_requirement::C1<<placeholder>, typename T::a>];}, false) struct expr_requirement::b<T>::r [with U = short int; T = int]': s6aywpah.cpp:15:30: required from here s6aywpah.cpp:11:32: internal compiler error: tree check: accessed elt 1 of 'tree_vec' with 0 elts in hash, at cp/constraint.cc:2486 11 | requires (requires { { 0 } -> C1<typename T::a>; }, false) | ~~^~~~~~~~~~~~~~~~~~~~~~~~ 0x8768fa tree_vec_elt_check_failed(int, int, char const*, int, char const*) /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/tree.cc:8889 0x9a55e3 tree_vec_elt_check(tree_node*, int, char const*, int, char const*) /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/tree.h:3666 0x9a55e3 sat_hasher::hash(sat_entry*) /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/constraint.cc:2486 0x9a13a3 hash_table<sat_hasher, false, xcallocator>::find_slot(sat_entry* const&, insert_option) /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/hash-table.h:435 0x9a13a3 satisfaction_cache::satisfaction_cache(tree_node*, tree_node*, sat_info) /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/constraint.cc:2580 0x9a442e satisfy_atom /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/constraint.cc:2897 0x9a442e satisfy_constraint_r /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/constraint.cc:3006 0x9a4d14 satisfy_normalized_constraints /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/constraint.cc:3031 0x9a2bc8 satisfy_nondeclaration_constraints /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/constraint.cc:3113 0x9a2bc8 constraint_satisfaction_value /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/constraint.cc:3268 0x9a4dd4 constraints_satisfied_p(tree_node*, tree_node*) /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/constraint.cc:3300 0xb20299 do_auto_deduction(tree_node*, tree_node*, tree_node*, int, auto_deduction_context, tree_node*, int) /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/pt.cc:30234 0x9a3610 type_deducible_p /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/constraint.cc:2010 0x9a3610 tsubst_compound_requirement /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/constraint.cc:2075 0x9a3610 tsubst_requirement /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/constraint.cc:2155 0x9a3610 tsubst_requires_expr /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/constraint.cc:2278 0x9a4d7b tsubst_requires_expr(tree_node*, tree_node*, int, tree_node*) /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/constraint.cc:2297 0xb27141 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/pt.cc:21288 0xb3e921 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/pt.cc:19413 0xb3fc67 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) /var/tmp/portage/sys-devel/gcc-12.0.1_p20220213/work/gcc-12-20220213/gcc/cp/pt.cc:19391