[cfe-dev] __attribute__((noreturn))

Talin viridia at gmail.com
Tue May 10 20:28:57 PDT 2011


I'm having some trouble getting clang to work with LLVM_ATTRIBUTE_NORETURN
defined in Support/Compiler.h. There are several problems:

First there's a problem with the macros themselves - AFAIK
__declspec(noreturn) has to come at the *front* of the declaration, while
__attribute__((noreturn)) has to come *after* it. The usual way of dealing
with this is to define a macro which surrounds the declaration like so:

    LLVM_ATTRIBUTE_NORETURN(void myfunc());

That way the macro can decide whether to put the noreturn attribute either
before or after the declaration. But the definitions in Compiler.h aren't
written that way:


#ifdef __GNUC__
#define LLVM_ATTRIBUTE_NORETURN __attribute__((noreturn))
#elif defined(_MSC_VER)
#define LLVM_ATTRIBUTE_NORETURN __declspec(noreturn)
#else
#define LLVM_ATTRIBUTE_NORETURN
#endif


So my first question is - has anyone ever tried using these macros under
Windows?

However, there's a more fundamental problem, which is that clang seems to be
ignoring the __attribute__((noreturn)) altogether. That is, instead of
relying on the above macros, if I just paste the noreturn attribute after my
function, I still get "error: control reaches end of non-void function" in
many places - errors which I wasn't getting with gcc.

--
--Talin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110510/60f94b8a/attachment.html>


More information about the cfe-dev mailing list