https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93862
Bug ID: 93862
Summary: ICE on static_cast of rvalue-reference-to-array of
unknown bound [P0338] to its known static bound
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: wjwray at gmail dot com
Target Milestone: ---
https://wandbox.org/permlink/ZaGwU3l7WbEc91Hw
1st line below an rvalue array binds, with lifetime extension,
to an (rvalue-)reference-to-array of unknown bound (by P0388),
so decltype(intu_rvref) is int(&&)[]
2nd line attempts to static_cast to its correct static type,
as an lvalue-ref; this is rejected, it should be accepted.
3rd line attempts to static_cast to rvalue-ref of correct static
at which point the compiler crashes (stack trace below):
int(&&intu_rvref)[]{1,2,3,4}; // (1) OK since P0388
// int(&int4_lvref)[4] = static_cast<int(&)[4]>(intu_rvref); // (2)
// error: invalid 'static_cast' from type 'int []' to type 'int (&)[4]'
int(&&int4_rvref)[4] = static_cast<int(&&)[4]>(intu_rvref); // (3) ICE
stack trace
prog.cc:6:58: internal compiler error: Segmentation fault
6 | int(&&int4_rvref)[4] = static_cast<int(&&)[4]>(intu_rvref); // ICE
| ^
0xc173ef crash_signal
../../source/gcc/toplev.c:328
0xe583b4 tree_nop_conversion
../../source/gcc/tree.c:12663
0xe583b4 tree_nop_conversion
../../source/gcc/tree.c:12652
0xe583b4 tree_strip_nop_conversions(tree_node*)
../../source/gcc/tree.c:12694
0x63284e potential_constant_expression_1
../../source/gcc/cp/constexpr.c:7381
0x6337d2 potential_constant_expression_1(tree_node*, bool, bool, bool, int)
../../source/gcc/cp/constexpr.c:7981
0x6337d2 potential_constant_expression(tree_node*)
../../source/gcc/cp/constexpr.c:7990
0x6779ac cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int)
../../source/gcc/cp/decl.c:7550
0x6f96c0 cp_parser_init_declarator
../../source/gcc/cp/parser.c:20828
0x6dc7c0 cp_parser_simple_declaration
../../source/gcc/cp/parser.c:13678
0x701a82 cp_parser_declaration
../../source/gcc/cp/parser.c:13377
0x7021a4 cp_parser_translation_unit
../../source/gcc/cp/parser.c:4731
0x7021a4 c_parse_file()
../../source/gcc/cp/parser.c:43709
0x7c9aab c_common_parse_file()
../../source/gcc/c-family/c-opts.c:1186
Please submit a full bug report