https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65263
Bug ID: 65263 Summary: [5 Regression] ICE (error: unrecognizable insn / in insn_min_length, at config/rs6000/rs6000.md) on powerpc64le-linux-gnu Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: doko at gcc dot gnu.org seen with r221076 on powerpc64le-linux-gnu $ g++ -c -g -O3 -fPIC eigenvalue.ii eigenvalue.ii:26:19: warning: direct base 'VirtualMatrice<int>' inaccessible in 'C<int>' due to ambiguity template <> class C<int> : H<Complex>, VirtualMatrice<Complex> { ^ eigenvalue.ii: In member function 'virtual bool C<int>::_ZThn8_NK1CIiE5m_fn1Ei(int) const': eigenvalue.ii:47:1: error: unrecognizable insn: } ^ (call_insn/j 3 2 4 (parallel [ (call (mem:SI (symbol_ref/i:DI ("_ZNK14VirtualMatriceIiE5m_fn1Ei") [flags 0x1] <function_decl 0x3fff9696fdf8 m_fn1>) [0 S4 A8]) (const_int 0 [0])) (use (const_int 0 [0])) (use (reg:SI 65 lr)) (simple_return) ]) eigenvalue.ii:27 -1 (nil) (nil)) eigenvalue.ii:47:1: internal compiler error: in insn_min_length, at config/rs6000/rs6000.md:7813 Please submit a full bug report, with preprocessed source if appropriate. $cat eigenvalue.ii template <class> class A; template <class R> struct VirtualMatrice { virtual bool m_fn1(int) const { return true; } struct B { A<R> x; B(VirtualMatrice *p1, A<R> p2) : x(p2) { p1->m_fn1(0) ?: throw; } }; void operator*(A<R> p1) { B(this, p1); } ~VirtualMatrice(); } ; template <class> class A { public: operator int *(); A(int *, long); }; class G : public A<int> { public: G(long); }; int typedef Complex; template <class> class H : VirtualMatrice<int> {}; template <class> class C; template <> class C<int> : H<Complex>, VirtualMatrice<Complex> { bool m_fn1(int) const { return true; } }; template <class K, class Mat> void DoIdoAction(int, int, A<K> p3, A<K>, A<K>, A<K>, Mat, Mat &p8) { p8 *p3; } class D { typedef int K; class F { int operator()() const; }; }; int D::F::operator()() const { VirtualMatrice<K> *a; VirtualMatrice<K> b, &B = *a; G c(0), g(1); int d, e, f; A<K> h(&g[f], 0), i(&g[e], 0), j(&g[d], 0); DoIdoAction(0, 3, h, i, j, c, b, B); }