https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98329
Bug ID: 98329 Summary: [11 Regression] ICE in cp_build_bit_cast, at cp/semantics.c:10730 Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: gs...@t-online.de Target Milestone: --- Follow-up of pr98193, with test case derived from bit-cast7.C (similar for other files bit-cast*.C). Gives an ICE with modifications like "&from", "*from", "**from" "-from", "--from", etc. at marker "///" : $ cat z1.cc template <typename To, typename From> constexpr To bit_cast (const From &from) { return __builtin_bit_cast (To, &from); /// } struct J { long int a, b : 11, h; }; struct K { long int a, b : 11, c; constexpr bool operator == (const K &x) { return a == x.a && b == x.b && c == x.c; } }; struct L { long long int a, b : 11, h; }; struct M { long long int a, b : 11, c; constexpr bool operator == (const M &x) { return a == x.a && b == x.b && c == x.c; } }; static_assert (bit_cast <K> (J{}) == K{}, ""); static_assert (bit_cast <M> (L{0x0feedbacdeadbeefLL}) == M{0x0feedbacdeadbeefLL}, ""); $ g++-11-20201213 -c z1.cc z1.cc: In instantiation of 'constexpr To bit_cast(const From&) [with To = K; >From = J]': z1.cc:35:33: required from here z1.cc:5:30: internal compiler error: Segmentation fault 5 | return __builtin_bit_cast (To, &from); /// | ^~ 0xf86f4f crash_signal ../../gcc/toplev.c:327 0x911421 cp_build_bit_cast(unsigned int, tree_node*, tree_node*, int) ../../gcc/cp/semantics.c:10730 0x89765f tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) ../../gcc/cp/pt.c:20747 0x8bca30 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/cp/pt.c:19007 0x8bb83f tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/cp/pt.c:18084 0x8bc9ef tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/cp/pt.c:18398 0x8a12c5 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/cp/pt.c:18059 0x8a12c5 instantiate_body ../../gcc/cp/pt.c:25728 0x8a2b8f instantiate_decl(tree_node*, bool, bool) ../../gcc/cp/pt.c:26017 0x6e697c instantiate_cx_fn_r ../../gcc/cp/constexpr.c:6951 0x12dbc13 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)) ../../gcc/tree.c:12095 0x12dc53d walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)) ../../gcc/tree.c:12431 0x12dc478 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)) ../../gcc/tree.c:12335 0x12dc53d walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)) ../../gcc/tree.c:12431 0x12e0245 walk_tree_without_duplicates_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)) ../../gcc/tree.c:12457 0x6f5858 instantiate_constexpr_fns ../../gcc/cp/constexpr.c:6971 0x6f5858 cxx_eval_outermost_constant_expr ../../gcc/cp/constexpr.c:7125 0x6fa6b4 maybe_constant_value(tree_node*, tree_node*, bool) ../../gcc/cp/constexpr.c:7381 0x90f76d finish_static_assert(tree_node*, tree_node*, unsigned int, bool, bool) ../../gcc/cp/semantics.c:9932 0x82de02 cp_parser_static_assert ../../gcc/cp/parser.c:15365