https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98551
Bug ID: 98551 Summary: [11 Regression] ICE in replace_result_decl, at cp/constexpr.c:2150 Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: doko at debian dot org Target Milestone: --- seen with trunk 20210102, building the verdigris package. $ cat tutorial.ii template <typename> struct integer_sequence; template <long... _Idx> using index_sequence = integer_sequence<long, _Idx...>; struct QNonConstOverload { template <typename R, typename T> constexpr auto operator()(R(T::*ptr)) -> decltype(ptr) { return ptr; } }; template <typename...> QNonConstOverload qOverload; struct make_index_sequence_helper { using result = index_sequence<>; }; template <int> using make_index_sequence = make_index_sequence_helper::result; template <int N> using StaticStringArray = const char[N]; template <int N, typename = make_index_sequence<N>> struct StaticString; template <int N, long... I> struct StaticString<N, index_sequence<I...>> { constexpr StaticString(StaticStringArray<N>); }; struct { } W_EmptyFlag; template <typename F, int NameLength> struct MetaMethodInfo { F func; StaticString<NameLength> paramTypes; }; template <typename F, int N, typename ParamTypes> constexpr MetaMethodInfo<F, N> makeMetaSlotInfo(F f, StaticStringArray<N> &name, ParamTypes) { return {f, name}; } class SlotTutorial { using W_ThisType = SlotTutorial; void overload() { MetaMethodInfo<void (SlotTutorial::*)(), 9> __trans_tmp_3 = makeMetaSlotInfo(qOverload<>(&W_ThisType::overload), "overload", W_EmptyFlag) } }; $ g++ -c -O0 -std=gnu++14 -Wall tutorial.ii tutorial.ii: In member function ‘void SlotTutorial::overload()’: tutorial.ii:34:37: in ‘constexpr’ expansion of ‘qOverload<>.QNonConstOverload::operator()<void(), SlotTutorial>(&SlotTutorial::overload)’ tutorial.ii:35:37: internal compiler error: in replace_result_decl, at cp/constexpr.c:2150 35 | W_EmptyFlag) | ^ 0x810fad replace_result_decl ../../src/gcc/cp/constexpr.c:2150 0x810fad cxx_eval_call_expression ../../src/gcc/cp/constexpr.c:2792 0x137c484 cxx_eval_constant_expression ../../src/gcc/cp/constexpr.c:6117 0x1496170 cxx_bind_parameters_in_call ../../src/gcc/cp/constexpr.c:1594 0x1496170 cxx_eval_call_expression ../../src/gcc/cp/constexpr.c:2533 0x137c484 cxx_eval_constant_expression ../../src/gcc/cp/constexpr.c:6117 0x1378d10 cxx_eval_outermost_constant_expr ../../src/gcc/cp/constexpr.c:7126 0x1385bd5 maybe_constant_value(tree_node*, tree_node*, bool) ../../src/gcc/cp/constexpr.c:7397 0x1385518 cp_fully_fold(tree_node*) ../../src/gcc/cp/cp-gimplify.c:2155 0x13583b0 cp_fully_fold_init(tree_node*) ../../src/gcc/cp/cp-gimplify.c:2176 0x13583b0 store_init_value(tree_node*, tree_node*, vec<tree_node*, va_gc, vl_embed>**, int) ../../src/gcc/cp/typeck2.c:803 0x133ec91 check_initializer ../../src/gcc/cp/decl.c:7028 0x132e912 cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int) ../../src/gcc/cp/decl.c:7946 0x12f4415 cp_parser_init_declarator ../../src/gcc/cp/parser.c:21798 0x12ed5ae cp_parser_simple_declaration ../../src/gcc/cp/parser.c:14378 0x1398990 cp_parser_declaration_statement ../../src/gcc/cp/parser.c:13522 0x1355413 cp_parser_statement ../../src/gcc/cp/parser.c:11746 0x13515a5 cp_parser_statement_seq_opt ../../src/gcc/cp/parser.c:12112 0x13515a5 cp_parser_compound_statement ../../src/gcc/cp/parser.c:12062 0x134f2f7 cp_parser_function_body ../../src/gcc/cp/parser.c:23987 Please submit a full bug report, with preprocessed source if appropriate.