https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66468
Markus Trippelsdorf <trippels at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2015-06-09 Ever confirmed|0 |1 --- Comment #4 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- Yeah. It is also easily fixed: markus@x4 testc % cat 1.ii namespace std { template <typename> class allocator; template <typename _Tp, typename = allocator<_Tp> > class vector { public: ~vector () {} }; vector<unsigned> b; } template <typename _Tp> class A { public: typedef _Tp reference; }; template <typename _Tp, typename _Alloc = A<_Tp> > class B { public: typename _Alloc::reference operator[](int); }; namespace MosesTuning { class Point { }; class Optimizer { public: float Run (Point &) const; }; } using namespace MosesTuning; class C { public: C (Point) { m_optimizer.Run (m_point); } Optimizer m_optimizer; Point m_point; }; main () { B<Point> a; (C (a[0])); } markus@x4 testc % cat 2.ii namespace std { template <typename> class allocator; struct _Vector_base { ~_Vector_base (); }; template <typename _Tp, typename = allocator<_Tp> > class vector : _Vector_base { }; } namespace MosesTuning { class Point; class Optimizer { float Run (Point &) const; }; } using namespace std; namespace MosesTuning { float Optimizer::Run (Point &) const { vector<unsigned> a; } } markus@x4 testc % /var/tmp/gcc_test/usr/local/bin/g++ -r -nostdlib 1.ii 2.ii -g -O2 -flto 2.ii: In member function ‘__base_dtor ’: 2.ii:28:1: internal compiler error: in check_die, at dwarf2out.c:5712