This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/84785] New: internal compiler error: unexpected expression ‘I’ of kind template_parm_index


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84785

            Bug ID: 84785
           Summary: internal compiler error: unexpected expression ‘I’ of
                    kind template_parm_index
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mpolacek at gcc dot gnu.org
  Target Milestone: ---

template <typename> struct A;
template <bool> struct B;
template <unsigned long> struct in_place_index_t {};
template <bool B, typename> using enable_if_t = typename B<B>::type;
template <typename F> using invoke_result_t = typename F::type;
template <long> using type_pack_element = int;
template <long> using type_pack_element_t = type_pack_element<1>;
template <typename> struct traits;
class C {
public:
  template <unsigned long I> C(in_place_index_t<I>);
};
template <typename> class destructor : C {
  using super = C;
  using super::super;
}

;
class constructor : destructor<traits<int>> {
  using super = destructor;
  using super::super;
};
class F : constructor {
  using super = constructor;
  using super::super;
};
template <typename> class copy_constructor : F {
  using super = F;
  using super::super;
}

;
class D : copy_constructor<traits<int>> {
  using super = copy_constructor;
  using super::super;
};
class G : D {
  using super = D;
  using super::super;
};
class H : G {
  using super = G;
  using super::super;
};
class I : H {
  using super = H;
  using super::super;
};
template <typename T> using best_match = invoke_result_t<T>;
class variant {
public:
  variant() : impl_(in_place_index_t<0>{}) {}
  template <typename Arg, long I = best_match<Arg>::value,
            typename = type_pack_element_t<I>, enable_if_t<A<Arg>::value, int>>
  variant(Arg &&);
  I impl_;
};

struct S {
  variant var;
};
int main() { S s; }


$ ./cc1plus.258039 -quiet x.cc
x.cc: In substitution of ‘template<long int <anonymous> > using
type_pack_element_t = type_pack_element<1> [with long int <anonymous> = I]’:
x.cc:54:13:   required by substitution of ‘template<class Arg, long int I,
class, typename B<A< <template-parameter-1-1> >::value>::type <anonymous> >
variant::variant(Arg&&) [with Arg = const variant&; long int I = <missing>;
<template-parameter-1-3> = <missing>; typename B<A< <template-parameter-1-1>
>::value>::type <anonymous> = <missing>]’
x.cc:62:16:   required from here
x.cc:54:13: internal compiler error: unexpected expression ‘I’ of kind
template_parm_index
             typename = type_pack_element_t<I>, enable_if_t<A<Arg>::value,
int>>
             ^~~~~~~~
0x86a8b4 cxx_eval_constant_expression
        ../../gcc/cp/constexpr.c:4767
0x86ac7b cxx_eval_outermost_constant_expr
        ../../gcc/cp/constexpr.c:4826
0x86b832 maybe_constant_value(tree_node*, tree_node*)
        ../../gcc/cp/constexpr.c:5044
0xa10fe8 convert_nontype_argument
        ../../gcc/cp/pt.c:6542
0xa15cb9 convert_template_argument
        ../../gcc/cp/pt.c:7862
0xa17772 coerce_template_parms
        ../../gcc/cp/pt.c:8324
0xa17d1d coerce_innermost_template_parms
        ../../gcc/cp/pt.c:8429
0xa4d22b instantiate_alias_template
        ../../gcc/cp/pt.c:18742
0xa32049 tsubst(tree_node*, tree_node*, int, tree_node*)
        ../../gcc/cp/pt.c:13712
0xa23c15 tsubst_template_arg
        ../../gcc/cp/pt.c:10941
0xa50c18 type_unification_real
        ../../gcc/cp/pt.c:19851
0xa4e388 fn_type_unification(tree_node*, tree_node*, tree_node*, tree_node*
const*, unsigned int, tree_node*, unification_kind_t, int, bool, bool)
        ../../gcc/cp/pt.c:19039
0x7fd8a0 add_template_candidate_real
        ../../gcc/cp/call.c:3176
0x7fddf2 add_template_candidate
        ../../gcc/cp/call.c:3258
0x80641e add_candidates
        ../../gcc/cp/call.c:5525
0x81668e build_new_method_call_1
        ../../gcc/cp/call.c:9154
0x817c47 build_new_method_call(tree_node*, tree_node*, vec<tree_node*, va_gc,
vl_embed>**, tree_node*, int, tree_node**, int)
        ../../gcc/cp/call.c:9361
0x969717 locate_fn_flags
        ../../gcc/cp/method.c:1024
0x96ab13 walk_field_subobs
        ../../gcc/cp/method.c:1439
0x96ba99 synthesized_method_walk
        ../../gcc/cp/method.c:1744
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]