On Fri, Jan 16, 2015 at 9:34 AM, Markus Trippelsdorf <mar...@trippelsdorf.de> wrote: > On 2015.01.16 at 00:15 +0100, Jan Hubicka wrote: >> Hi, >> can_remove_node_now_p assumes that the node in question has no direct calls, >> this >> however is not checked in inline_call that leads to alias to be removed from >> comdat group while it should not. >> >> Bootstrapped/regtested x86_64-linux, comitted. > > Here's a testcase for this issue. OK for trunk?
Ok. Thanks, Richard. > 2015-01-16 Markus Trippelsdorf <mar...@trippelsdorf.de> > > PR ipa/64163 > PR ipa/64612 > * g++.dg/ipa/pr64612.C: New test. > > /* { dg-do compile } */ > /* { dg-options "-fPIC -O3 -std=c++11" } */ > /* { dg-final { scan-assembler "_ZN5QListI7QStringED1Ev" } } */ > > 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);;) > ; > } > > -- > Markus