aboutsummaryrefslogtreecommitdiff
path: root/Analysis/GRExprEngine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Analysis/GRExprEngine.cpp')
-rw-r--r--Analysis/GRExprEngine.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/Analysis/GRExprEngine.cpp b/Analysis/GRExprEngine.cpp
index f227160bfb..45dbac7045 100644
--- a/Analysis/GRExprEngine.cpp
+++ b/Analysis/GRExprEngine.cpp
@@ -550,6 +550,21 @@ void GRExprEngine::VisitCall(CallExpr* CE, NodeTy* Pred,
else
St = EvalCall(CE, cast<LVal>(L), (*DI)->getState());
+ // Check for the "noreturn" attribute.
+
+ if (isa<lval::FuncVal>(L))
+ if (cast<lval::FuncVal>(L).getDecl()->getAttr<NoReturnAttr>()) {
+
+ NodeTy* N = Builder->generateNode(CE, St, *DI);
+
+ if (N) {
+ N->markAsSink();
+ NoReturnCalls.insert(N);
+ }
+
+ continue;
+ }
+
Nodify(Dst, CE, *DI, St);
}
}