https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112372
--- Comment #2 from Giuliano Procida <gprocida at google dot com> --- The symbols are not aliased (which is what I thought might have happened with very aggressive optimisations). If they had been aliased, it would be much harder to give the symbols types. 0000000000000000 T x 0000000000000010 T y 0000000000000020 T z Also: Disassembly of section .text: 0000000000000000 <x>: 0: c3 ret 1: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) 8: 00 00 00 00 c: 0f 1f 40 00 nopl 0x0(%rax) 0000000000000010 <y>: 10: c3 ret 11: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) 18: 00 00 00 00 1c: 0f 1f 40 00 nopl 0x0(%rax) 0000000000000020 <z>: 20: c3 ret So it should have been entirely possible to assign the correct byte ranges (low/high PC) to the 3 functions.