‘noreturn’ function does return

c, compiler-errors, compiler-warnings, gcc, warnings

Solution

It is possible to tell `gcc` that a particular function never returns. This permits certain optimizations and helps avoid spurious warnings of uninitialized variables.

This is done using the `noreturn` attribute:

void func() __attribute__ ((noreturn));

If the function does return despite the `noreturn` attribute, the compiler emits the warning you're seeing (which in your case gets converted into an error).

Since you're unlikely to be using `noreturn` in your code, the likely explanation is that you have a function whose name clashes with a standard `noreturn` function, as in the below example:

#include <stdlib.h>

void exit(int) {
}                // warning: 'noreturn' function does return [enabled by default]

Here, my `exit` clashes with `exit(3)`.

Another obvious candidate for such a clash is `abort(3)`.

Of course, if your function is actually called `hello()`, the culprit is almost certainly somewhere within your code base.

Problem

When I compile the C program below, I get this warning: `‘noreturn’ function does return`. This is the function: ``` void hello(void){ int i; i=1; } ``` Why could it be happening? All the call to this function is `hello();` EDIT: The full error output: ``` home.c: In function ‘hello’: hhme.c:838:7: error: variable ‘i’ set but not used [-Werror=unused-but-set-variable] home.c:840:1: error: ‘noreturn’ function does return [-Werror] cc1: all warnings being treated as errors make: *** [home.o] Error 1 ```

Original source

Related problems