http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58678

--- Comment #52 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
(In reply to Jason Merrill from comment #51)
> (In reply to Markus Trippelsdorf from comment #48)
> > markus@x4 /tmp % /var/tmp/gcc_test/usr/local/bin/g++ -flto -c -O2 test.ii &&
> > nm test.o | grep _ZN8Calligra6Sheets5qHashERKNS0_10ConditionsE
> >          U _ZN8Calligra6Sheets5qHashERKNS0_10ConditionsE
> 
> Strange.
> 
> # ggcc -c -flto wa.C -O2 -v  && nm wa.o
> ...
> GNU C++ (GCC) version 4.9.0 20140317 (experimental)
> (x86_64-unknown-linux-gnu)
> ...
> 0000000000000001 C __gnu_lto_slim
> 0000000000000001 C __gnu_lto_v1
> 
> It seems GCC is defaulting to fat LTO objects for you, but not for me; I
> guess that's because my system linker supports the LTO plugin.
> 
> But even compiling with -ffat-lto-objects doesn't reproduce the problem;
> with that option nm shows
> 
> 0000000000000001 C __gnu_lto_v1
>                  U _ZN1BIiE14const_iteratorneES1_
>                  U _ZN8Calligra6Sheets1G5m_fn1Ev
> 0000000000000000 T _ZN8Calligra6Sheets1H5m_fn1Ev
>                  U _ZNK8Calligra6Sheets1H5m_fn2Ev
>                  U _ZNK8Calligra6Sheets1H5m_fn3Ev
> 
> And -fdump-ipa-devirt shows that we aren't speculatively devirtualizing a
> call to ~J because it's an artificial destructor, so it seems to have been
> fixed by r208241.  What does -fdump-ipa-devirt say for you?

Sorry, I've forgot to mention that my system binutils use the linker plugin
by default. So you have to use the gcc wrapper (gcc-nm) to read the
lto symbols, like:
 gcc -c -flto wa.C -O2 -v  && gcc-nm wa.o

Reply via email to