summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Stump <mrs@apple.com>2009-07-27 21:45:16 +0000
committerMike Stump <mrs@apple.com>2009-07-27 21:45:16 +0000
commit9e3b01f697ecf6ba34bd95c31a01b1ad375f12c1 (patch)
treef0acccb2cda1eaf5ab98d510871689650a35d01b
parent9a9e0c2b17f6277478f70003aa53936dbced6de0 (diff)
downloadbcm5719-llvm-9e3b01f697ecf6ba34bd95c31a01b1ad375f12c1.tar.gz
bcm5719-llvm-9e3b01f697ecf6ba34bd95c31a01b1ad375f12c1.zip
Add knowledge about _longjmp being noreturn.
llvm-svn: 77254
-rw-r--r--clang/lib/Sema/SemaDecl.cpp4
-rw-r--r--clang/test/Sema/return.c5
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);
}
OpenPOWER on IntegriCloud