I assumed, at first, that it was somehow falling through the infinite loop and accidentally runnning the unreachable function, but it clearly explicitly runs it in the assembler generated…
10f4: 48 8d 3d d5 00 00 00 lea 0xd5(%rip),%rdi # 11d0 <_Z11unreachablev> 10fb: ff 15 b7 2e 00 00 call *0x2eb7(%rip) # 3fb8 <__libc_start_main@GLIBC_2.34>
how odd.
edit: ah, it’s called from __start, which suggests that main is being elided entirely by the optimiser, and somehow ‘unreachable’ is simply becoming a defacto ‘main’
Why does this happen?
compiler optimizer skipping unreachable code, but I can’t seem to get it to work locally now that I tried it
Tried it on https://www.onlinegdb.com/online_c++_compiler Could not reproduce.
You need to use exactly the same command:
clang++ loop.cpp -O1 -Wall -o loop
this page likely doesn’t use clang but GCC, so it won’t work.ok yeah didn’t work on my machine either
edit: interestingly enough seems to work on some architectures and not others, a friend of mine tried it and it worked for him. I guess that’s why it’s an undefined behvaior. :)
I can see the whole loop being optimized away, but how does the method that isn’t being called get called?
my guess is the optimizer detects the infinite loop and removes it