>From 23a4b0578d2f55265606a5e6cfe2a2c091f54bf3 Mon Sep 17 00:00:00 2001
From: Erik Verbruggen <erikjv@me.com>
Date: Tue, 28 Feb 2012 10:19:45 +0100
Subject: [PATCH] Remove a recursive visitiation in ExprEngine that is no
 longer needed because the CFG is fully linearized.

---
 lib/StaticAnalyzer/Core/ExprEngine.cpp |   13 ++-----------
 test/Analysis/nullptr.cpp              |    9 +++++++++
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/lib/StaticAnalyzer/Core/ExprEngine.cpp b/lib/StaticAnalyzer/Core/ExprEngine.cpp
index ffc0916..a8bff38 100644
--- a/lib/StaticAnalyzer/Core/ExprEngine.cpp
+++ b/lib/StaticAnalyzer/Core/ExprEngine.cpp
@@ -1655,12 +1655,9 @@ void ExprEngine::VisitAsmStmtHelperOutputs(const AsmStmt *A,
     return;
   }
 
-  ExplodedNodeSet Tmp;
-  Visit(*I, Pred, Tmp);
   ++I;
 
-  for (ExplodedNodeSet::iterator NI = Tmp.begin(), NE = Tmp.end();NI != NE;++NI)
-    VisitAsmStmtHelperOutputs(A, I, E, *NI, Dst);
+  VisitAsmStmtHelperOutputs(A, I, E, Pred, Dst);
 }
 
 void ExprEngine::VisitAsmStmtHelperInputs(const AsmStmt *A,
@@ -1693,13 +1690,7 @@ void ExprEngine::VisitAsmStmtHelperInputs(const AsmStmt *A,
     return;
   }
 
-  ExplodedNodeSet Tmp;
-  Visit(*I, Pred, Tmp);
-
-  ++I;
-
-  for (ExplodedNodeSet::iterator NI = Tmp.begin(), NE = Tmp.end(); NI!=NE; ++NI)
-    VisitAsmStmtHelperInputs(A, I, E, *NI, Dst);
+  VisitAsmStmtHelperInputs(A, I, E, Pred, Dst);
 }
 
 
diff --git a/test/Analysis/nullptr.cpp b/test/Analysis/nullptr.cpp
index 89b4173..3f2bac1 100644
--- a/test/Analysis/nullptr.cpp
+++ b/test/Analysis/nullptr.cpp
@@ -50,3 +50,12 @@ void zoo1() {
   char **p = 0;
   delete *(p + 0); // expected-warning{{Dereference of null pointer}}
 }
+
+void zoo2() {
+  int **a = 0;
+  int **b = 0;
+  asm ("nop"
+      :"=a"(*a)
+      :"0"(*b) // expected-warning{{Dereference of null pointer}}
+      );
+}
-- 
1.7.5.4

