[Bug tree-optimization/115049] [14/15 Regression] Silent severe miscompilation around inline functions

manx-bugzilla at problemloesungsmaschine dot de gcc-bugzilla@gcc.gnu.org
Tue Jul 9 07:54:05 GMT 2024


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

--- Comment #4 from Jörn Heusipp <manx-bugzilla at problemloesungsmaschine dot de> ---
Using '-Q --help=optimizers' to verify, "-O2" is equivalent to "
-O1 \
-falign-functions=16 \
-falign-jumps=16:11:8 \
-falign-labels=0:0:8 \
-falign-loops=16:11:8 \
-fcaller-saves \
-fcode-hoisting \
-fcrossjumping \
-fcse-follow-jumps \
-fdevirtualize \
-fdevirtualize-speculatively \
-fexpensive-optimizations \
-fgcse \
-fhoist-adjacent-loads \
-findirect-inlining \
-finline-functions \
-finline-small-functions \
-fipa-bit-cp \
-fipa-cp \
-fipa-icf \
-fipa-icf-functions \
-fipa-icf-variables \
-fipa-ra \
-fipa-sra \
-fipa-vrp \
-fisolate-erroneous-paths-dereference \
-flra-remat \
-fopenmp-target-simd-clone=nohost \
-foptimize-sibling-calls \
-foptimize-strlen \
-fpartial-inlining \
-fpeephole2 \
-free \
-freorder-blocks-algorithm=stc \
-freorder-functions \
-frerun-cse-after-loop \
-fschedule-insns2 \
-fstore-merging \
-fstrict-aliasing \
-ftree-loop-distribute-patterns \
-ftree-loop-vectorize \
-ftree-pre \
-ftree-slp-vectorize \
-ftree-switch-conversion \
-ftree-tail-merge \
-ftree-vrp \
-funroll-loops \
-fvect-cost-model=very-cheap \
-fno-rename-registers \
-fno-web \
"
for me.

If I remove any of '-fexpensive-optimizations' / '-finline-small-functions' /
'-fipa-ra' / '-ftree-vrp', the problem goes away.

When adding solely these 4 options in addition to '-O1', the problem does not
show up though. It requires also adding '-finline-functions' additionally to
trigger. And in this situation, I can remove '-fexpensive-optimizations' and it
still triggers. It does not crash in exactly the same position with this
"minimal" set of optimization flags (it crashes before the 1st printf instead
of before the 3rd), however it surely still should not crash at all. The same
symbol-removing hack still makes it work.

I cannot pinpoint a single optimization flag to trigger the problem alone, so
there appears to be some inter-dependencies between optimization passes (which
is not at all surprising to me).

This is sadly not 100% conclusive.

I somewhat doubt this is already decidable: Would '-O2
-fno-inline-small-functions -fno-ipa-ra -fno-tree-vrp' instead of forcing '-O1'
be a safe work-around for me to use in production?


More information about the Gcc-bugs mailing list