https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64163
--- Comment #7 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- Here is another reduced testcase. This time hopefully without and ODR issues. % cat qmimeglobpattern.ii class A { public: bool deref (); }; class QString; struct B { A ref; }; template <typename> class QList { B d; public: ~QList (); class const_iterator { }; const_iterator constBegin (); void clear (); void dealloc (); }; template <typename T> QList<T>::~QList () { if (d.ref.deref ()) dealloc (); } template <typename T> void QList<T>::clear () { QList (); } class A1 : public QList<QString> { }; class B1 { public: B1 (A1); }; struct F { void addMatch (const QString &&); A1 m_matchingMimeTypes; }; class G { A1 matchingGlobs (const QString &) const; }; void F::addMatch (const QString &&) { m_matchingMimeTypes.clear (); } A1 G::matchingGlobs (const QString &) const { A1 a; for (B1 b (a);;) ; } % cat qmimeprovider.ii class A { public: bool deref (); }; class QString; struct B { A ref; }; template <typename> class QList { B d; public: ~QList (); class const_iterator { }; const_iterator constBegin (); void clear (); void dealloc (); }; class C { QList<QString> c; QList<QString>::const_iterator i; public: C (QList<QString>) : i (c.constBegin ()) {} }; template <typename T> QList<T>::~QList () { if (d.ref.deref ()) dealloc (); } void fn1 () { QList<QString> a; C b (a); } % g++ -fuse-ld=bfd -shared -fPIC -O3 -fvisibility=hidden -std=c++0x qmimeglobpattern.ii qmimeprovider.ii % g++ -fuse-ld=gold -shared -fPIC -O3 -fvisibility=hidden -std=c++0x qmimeglobpattern.ii qmimeprovider.ii /usr/bin/ld.gold: error: /tmp/ccRfiSrB.o: requires dynamic R_X86_64_PC32 reloc against '_ZN5QListI7QStringED1Ev' which may overflow at runtime; recompile with -fPIC /tmp/ccRfiSrB.o:qmimeprovider.ii:function fn1(): warning: relocation refers to discarded section /tmp/ccRfiSrB.o:qmimeprovider.ii:function fn1(): warning: relocation refers to discarded section /tmp/ccRfiSrB.o:qmimeprovider.ii:function fn1(): warning: relocation refers to discarded section collect2: error: ld returned 1 exit status