diff options
Diffstat (limited to 'Analysis/GRExprEngine.cpp')
-rw-r--r-- | Analysis/GRExprEngine.cpp | 15 |
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); } } |