]> granicus.if.org Git - clang/commitdiff
GRExprEngine: Add pretty-stack trace printing for crashes and assertion failures.
authorTed Kremenek <kremenek@apple.com>
Wed, 11 Mar 2009 02:41:36 +0000 (02:41 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 11 Mar 2009 02:41:36 +0000 (02:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66629 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/GRExprEngine.cpp

index 8bc84d4bf5291ca8ae9b9a29c8996911b0a1c17c..c6457d9be3bd7eef410d266e28944bc67736c2f7 100644 (file)
@@ -18,6 +18,7 @@
 
 #include "clang/Analysis/PathSensitive/BugReporter.h"
 #include "clang/Basic/SourceManager.h"
+#include "clang/Basic/PrettyStackTrace.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/ADT/ImmutableList.h"
 #include "llvm/Support/Compiler.h"
@@ -152,6 +153,10 @@ const GRState* GRExprEngine::getInitialState() {
 
 void GRExprEngine::ProcessStmt(Stmt* S, StmtNodeBuilder& builder) {
   
+  PrettyStackTraceLoc CrashInfo(getContext().getSourceManager(),
+                                S->getLocStart(),
+                                "Error evaluating statement");
+  
   Builder = &builder;
   EntryNode = builder.getLastNode();
   
@@ -221,8 +226,11 @@ void GRExprEngine::ProcessStmt(Stmt* S, StmtNodeBuilder& builder) {
   Builder = NULL;
 }
 
-void GRExprEngine::Visit(Stmt* S, NodeTy* Pred, NodeSet& Dst) {
-  
+void GRExprEngine::Visit(Stmt* S, NodeTy* Pred, NodeSet& Dst) {  
+  PrettyStackTraceLoc CrashInfo(getContext().getSourceManager(),
+                                S->getLocStart(),
+                                "Error evaluating statement");
+
   // FIXME: add metadata to the CFG so that we can disable
   //  this check when we KNOW that there is no block-level subexpression.
   //  The motivation is that this check requires a hashtable lookup.
@@ -534,6 +542,10 @@ const GRState* GRExprEngine::MarkBranch(const GRState* state,
 
 void GRExprEngine::ProcessBranch(Stmt* Condition, Stmt* Term,
                                  BranchNodeBuilder& builder) {
+  
+  PrettyStackTraceLoc CrashInfo(getContext().getSourceManager(),
+                                Condition->getLocStart(),
+                                "Error evaluating branch");
 
   // Remove old bindings for subexpressions.
   const GRState* PrevState =