Hi.
I was trying to compile git with clang but it yielded the "function declared 'noreturn' should not return" error. Here is a small test case:
[filcab@Farnsworth ~] $ cat a.c
#include <stdio.h>
#include <stdlib.h>
#define NORETURN __attribute__((__noreturn__))
extern void a(void);
static NORETURN void die_builtin(int err)
{
exit(128);
}
static NORETURN void (*die_routine)(int i) = die_builtin;
extern NORETURN void die(int err);
void die (int err)
{
die_routine(err);
a();
}
extern NORETURN void aaa(int err);
void aaa(int err)
{
exit(1);
a();
}
[filcab@Farnsworth ~] $ clang -c a.c
a.c:20:1: warning: function declared 'noreturn' should not return
[-Winvalid-noreturn]
}
^
1 diagnostic generated.
[filcab@Farnsworth ~] $
Is this supposed to be like this? Or is it a bug? If I call a noreturn function pointer, I get the warning. If I call exit(), I don't.
I was expecting both to have the same behaviour.
The code where I saw this had a die() function which received a va_list. After calling this die() function, they "called" the macro va_close() and this triggered the warning.
Regards,
F