[Bug c++/98551] New: [11 Regression] ICE in replace_result_decl, at cp/constexpr.c:2150

doko at debian dot org gcc-bugzilla@gcc.gnu.org
Tue Jan 5 22:09:12 GMT 2021


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.


More information about the Gcc-bugs mailing list