https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66086
--- Comment #1 from Andrea Griffini <agriff at tin dot it> --- Not sure if this helps but I found that when compiling -m32 -O -fno-tree-dce the output of the program becomes correct but the generated code is not. More specifically the non-inlined version of `doit` contains no initialization of the allocated memory, but the inlined call in `main` does the allocation and does NOT initialize the memory but loads the expected result 3.14 directly in the stack before calling printf. Without -fno-tree-dce the inilined version simply reads the memory instead (that has not been initialized) and produces the wrong output.