Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 21994

Why do calls to _Noreturn generate real calls instead of jumps? [duplicate]

$
0
0

This question already has an answer here:

I looked at

//#define _Noreturn //<= uncomment to see jmp's change to call's

_Noreturn void ext(int,char const*);

__attribute((noinline))
_Noreturn void intern(int X)
{
    ext(X,"X"); //jmp unless ext is _Noreturn
}


void do_intern(void)
{
    intern(0);  //jmp unless intern is _Noreturn
}

int do_int_intern(void)
{
    intern(0);   //call in either case, 
                 //would've expected a jmp if intern is _Noreturn 
    return 42;   //erased if intern is _Noreturn
}

in https://gcc.godbolt.org/z/MoT-LK and I noticed all gcc, clang, and icc generate real calls (call in x86_64) for calls to a _Noreturn function even though without the _Noreturn the call would have been a direct jump (jmp in x86_64).

Why is this?


Viewing all articles
Browse latest Browse all 21994

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>