[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