https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117911
--- Comment #3 from Sam James <sjames at gcc dot gnu.org> ---
Fails with -fno-strict-aliasing too.
With Valgrind when (maybe) miscompiled:
```
==164909== Conditional jump or move depends on uninitialised value(s)
==164909== at 0x10A5E2: realsmith_proxy_j8M9c (in /tmp/a)
==164909== by 0x10A6A8: func_2.isra.0 (in /tmp/a)
==164909== by 0x10CB56: func_1.isra.0 (in /tmp/a)
==164909== by 0x108375: main (in /tmp/a)
==164909==
==164909== Conditional jump or move depends on uninitialised value(s)
==164909== at 0x10A614: realsmith_proxy_j8M9c (in /tmp/a)
==164909== by 0x10A6A8: func_2.isra.0 (in /tmp/a)
==164909== by 0x10CB56: func_1.isra.0 (in /tmp/a)
==164909== by 0x108375: main (in /tmp/a)
==164909==
==164909== Conditional jump or move depends on uninitialised value(s)
==164909== at 0x10A60F: realsmith_proxy_j8M9c (in /tmp/a)
==164909== by 0x10A6A8: func_2.isra.0 (in /tmp/a)
==164909== by 0x10CB56: func_1.isra.0 (in /tmp/a)
==164909== by 0x108375: main (in /tmp/a)
```
With GCC trunk asan+ubsan with -O3 -fno-stack-protector -fno-strict-aliasing
(so in theory not miscompiled):
```
==165062==ERROR: AddressSanitizer: stack-use-after-return on address
0x71feb7101020 at pc 0x5f8e5041002d bp 0x7ffc14e9c610 sp 0x7ffc14e9c600
READ of size 4 at 0x71feb7101020 thread T0
#0 0x5f8e5041002c in main (/tmp/a+0xa02c)
#1 0x75feb9205746 in __libc_start_call_main
../sysdeps/nptl/libc_start_call_main.h:58
#2 0x75feb92057f6 in __libc_start_main_impl ../csu/libc-start.c:360
#3 0x5f8e50411f20 in _start (/tmp/a+0xbf20)
Address 0x71feb7101020 is located in stack of thread T0 at offset 32 in frame
#0 0x5f8e5041c70f in func_14.constprop.0.isra.0 (/tmp/a+0x1670f)
This frame has 14 object(s):
[32, 36) 'l_985' (line 3338) <== Memory access at offset 32 is inside this
variable
[48, 52) 'p_0_EnthG' (line 3333)
[64, 68) 'p_1_Unkxz' (line 3333)
[80, 88) 'l_1048' (line 3343)
[112, 120) 'l_1160' (line 3344)
[144, 152) 'l_1016' (line 3385)
[176, 186) 'proxy_hzikI'
[208, 220) 'l_1046' (line 3408)
[240, 264) 'l_1068' (line 3386)
[304, 356) 'proxy_J0MGc'
[400, 456) 'l_986' (line 3358)
[496, 556) 'proxy_1ZFFb'
[592, 672) 'l_1208' (line 3346)
[704, 2648) 'l_1209' (line 3345)
HINT: this may be a false positive if your program uses some custom stack
unwind mechanism, swapcontext or vfork
(longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-use-after-return (/tmp/a+0xa02c) in main
Shadow bytes around the buggy address:
0x71feb7100d80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x71feb7100e00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x71feb7100e80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x71feb7100f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x71feb7100f80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x71feb7101000: f5 f5 f5 f5[f5]f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
0x71feb7101080: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
0x71feb7101100: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
0x71feb7101180: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
0x71feb7101200: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
0x71feb7101280: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
```