As far as I am aware, there is no [[maybe_noreturn]]
attribute in C .
I have a function which looks like this:
void func() {
try {
do_something();
} catch (const std::exception& e) {
std::exit(1);
}
}
If I would mark func
as [[noreturn]]
I'd run into UB for the happy case. Is it UB when I do not return from a function that is not marked as [[noreturn]]
?
Or are there other language constructs, compiler extensions or libraries that implement something like [[maybe_noreturn]]
?
CodePudding user response:
Is it UB when I do not return from a function that is not marked as [[noreturn]]?
No, it's well defined to terminate the program from a function regardless whether it has [[noreturn]]
attribute or not. Using [[noreturn]]
is optional when it is appropriate - i.e. when a function terminates unconditionally - but it is always recommended in such cases.
No such attribute as [[maybe_noreturn]]
is needed. If it were necessary, then you would find that you would have to declare any function potentially calling [[maybe_noreturn]]
function to also be [[maybe_noreturn]]
, and then functions that call those functions, all the way to the top of the call chain.