[cfe-dev] Invalid noreturn
    Filipe Cabecinhas 
    filcab at gmail.com
       
    Thu Dec 17 14:16:42 PST 2009
    
    
  
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 at 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 at Farnsworth ~] $ clang -c a.c
a.c:20:1: warning: function declared 'noreturn' should not return
       [-Winvalid-noreturn]
}
^
1 diagnostic generated.
[filcab at 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
    
    
More information about the cfe-dev
mailing list