[Bug ipa/69075] ICE when setting early-inlining-insns to other than default

miyuki at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Dec 31 00:28:00 GMT 2015


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

--- Comment #4 from Mikhail Maltsev <miyuki at gcc dot gnu.org> ---
Somewhat reduced testcase:

$ cat test2.cc 
using Timer_Probe = int;
struct A {
  Timer_Probe probe;
};
struct Gateway_Order_Probe : A {
  using Body = A;
  Gateway_Order_Probe() : Body{} {}
};

struct Backend_Response_Probe {
  int sequence_number;
  int message_id_value;
  int source_time;
};
template <typename T0> struct B { typedef T0 type; };
void *operator new(unsigned long, void *p2) { return p2; }

template <typename... Messages> class Variant_Message {
public:
  template <typename T> struct emplace_t { typedef T emplace_type; };
  template <typename T, typename... Args>
  Variant_Message(emplace_t<T>, Args &&...) noexcept;
  typename B<Messages...>::type largest_type;
  char storage_[sizeof largest_type];
};

template <typename... Messages>
template <typename T, typename... Args>
Variant_Message<Messages...>::Variant_Message(emplace_t<T>,
                                              Args &&...) noexcept {
  using msg_type = typename emplace_t<T>::emplace_type;
  new (storage_) msg_type;
}

template <typename T, typename Variant> class make_t : Variant {
  using emplace_t = typename Variant::template emplace_t<T>;

public:
  make_t() : Variant(emplace_t()) {}
};

template <typename T, typename Variant> make_t<T, Variant> make_variant() {
  return make_t<T, Variant>();
}

struct Performance_Data : Variant_Message<Backend_Response_Probe> {
  using base_type = Variant_Message;
  template <typename T>
  Performance_Data(emplace_t<T>)
      : base_type(emplace_t<T>()) {}
};
struct C {
  C(int const &&);
  decltype(make_variant<Gateway_Order_Probe, Performance_Data>()) probe_;
};
C::C(int const &&)
    : probe_(make_variant<Gateway_Order_Probe, Performance_Data>()) {}

$ /opt/gcc-5-latest/bin/g++ -std=c++14 -flto -O3 -fdevirtualize-at-ltrans
--param early-inlining-insns=15 test2.cc
test2.cc: In member function 'C::C(int const&&)':
test2.cc:57:67: internal compiler error: Segmentation fault
     : probe_(make_variant<Gateway_Order_Probe, Performance_Data>()) {}
                                                                   ^
0xd3b116 crash_signal
       
/home/jenkins/workspace/build-gcc-snapshot/src/gcc-5-20151229/gcc/toplev.c:383
0x6df210 tree_check(tree_node*, char const*, int, char const*, tree_code)
       
/home/jenkins/workspace/build-gcc-snapshot/src/gcc-5-20151229/gcc/tree.h:2850
0x6df210 is_really_empty_class(tree_node*)
       
/home/jenkins/workspace/build-gcc-snapshot/src/gcc-5-20151229/gcc/cp/class.c:8056
[snip]


More information about the Gcc-bugs mailing list