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?