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’
deleted by creator
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. :)
@yogthos What. That’s not possible? 😃
my guess is the optimizer detects the infinite loop and removes it
I can see the whole loop being optimized away, but how does the method that isn’t being called get called?