diff options
author | Mike Stump <mrs@apple.com> | 2009-07-27 21:45:16 +0000 |
---|---|---|
committer | Mike Stump <mrs@apple.com> | 2009-07-27 21:45:16 +0000 |
commit | 9e3b01f697ecf6ba34bd95c31a01b1ad375f12c1 (patch) | |
tree | f0acccb2cda1eaf5ab98d510871689650a35d01b | |
parent | 9a9e0c2b17f6277478f70003aa53936dbced6de0 (diff) | |
download | bcm5719-llvm-9e3b01f697ecf6ba34bd95c31a01b1ad375f12c1.tar.gz bcm5719-llvm-9e3b01f697ecf6ba34bd95c31a01b1ad375f12c1.zip |
Add knowledge about _longjmp being noreturn.
llvm-svn: 77254
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 4 | ||||
-rw-r--r-- | clang/test/Sema/return.c | 5 |
2 files changed, 6 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index d168a907a09..27c109f9f0a 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -3705,8 +3705,8 @@ void Sema::AddKnownFunctionAttributes(FunctionDecl *FD) { if (!FD->getAttr<FormatAttr>()) FD->addAttr(::new (Context) FormatAttr("printf", 2, Name->isStr("vasprintf") ? 0 : 3)); - } else if (Name->isStr("longjmp") && - !FD->hasAttr<NoReturnAttr>()) + } else if ((Name->isStr("longjmp") || Name->isStr("_longjmp")) + && !FD->hasAttr<NoReturnAttr>()) FD->addAttr(::new (Context) NoReturnAttr()); } diff --git a/clang/test/Sema/return.c b/clang/test/Sema/return.c index f439ad79940..c04337924ad 100644 --- a/clang/test/Sema/return.c +++ b/clang/test/Sema/return.c @@ -200,5 +200,8 @@ int test29() { #include <setjmp.h> jmp_buf test30_j; int test30() { - longjmp(test30_j, 1); + if (j) + longjmp(test30_j, 1); + else + _longjmp(test30_j, 1); } |