End paths when calling a function marked "noreturn."


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47690 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Analysis/GRExprEngine.cpp b/Analysis/GRExprEngine.cpp
index f227160..45dbac7 100644
--- a/Analysis/GRExprEngine.cpp
+++ b/Analysis/GRExprEngine.cpp
@@ -550,6 +550,21 @@
     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);
   }
 }