https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119614

--- Comment #19 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Sam James from comment #18)
> (In reply to Jakub Jelinek from comment #17)
> > Tried compiling the pr119614.C test from my last patch with -O2 -r -flto=2
> > -flto-partition=max but for some reason that still doesn't force each
> > function to a separate partition.
> 
> Try g++ -flto -flto-partition=max -O2 -shared on that.

That indeed reproduces it:
./xg++ -B ./ -flto -flto-partition=max -O2 -shared -o pr119614.lo pr119614.C
-fdump-tree-all -B ../x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/
lto-wrapper: warning: using serial compilation of 5 LTRANS jobs
lto-wrapper: note: see the ‘-flto’ option documentation for more information
In function ‘qux’,
    inlined from ‘qux’ at pr119614.C:19:1:
pr119614.C:27:36: error: cannot tail-call: call and return value are different
   27 |       [[gnu::musttail]] return baz ();
      |                                    ^
lto-wrapper: fatal error: ./xg++ returned 1 exit status
compilation terminated.
/usr/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status

Now, for tailc/musttail particularly, we don't need full return range, all we
need is the TREE_CONSTANT retval if the IPA VRP return range is singleton.
If I want to preserve it for LTO, would it go into cgraph node and some code in
ipa-prop or ipa-vrp would set it, something else?

Reply via email to