Fix a stale pointer issue that caused 300.twolf to fail to build on zion
authorChris Lattner <sabre@nondot.org>
Mon, 26 Jun 2006 19:20:48 +0000 (19:20 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 26 Jun 2006 19:20:48 +0000 (19:20 +0000)
last night.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28916 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/AliasSetTracker.cpp

index 3f6aa2c9b9fdcb82a19e4f4b1a231dccd24e336a..83ba69a69d0780ca072230c481347adf4d5f019b 100644 (file)
@@ -435,6 +435,17 @@ void AliasSetTracker::deleteValue(Value *PtrVal) {
   // Notify the alias analysis implementation that this value is gone.
   AA.deleteValue(PtrVal);
 
+  // If this is a call instruction, remove the callsite from the appropriate
+  // AliasSet.
+  CallSite CS = CallSite::get(PtrVal);
+  if (CS.getInstruction()) {
+    Function *F = CS.getCalledFunction();
+    if (!F || !AA.doesNotAccessMemory(F)) {
+      if (AliasSet *AS = findAliasSetForCallSite(CS))
+        AS->removeCallSite(CS);
+    }
+  }
+
   // First, look up the PointerRec for this pointer.
   hash_map<Value*, AliasSet::PointerRec>::iterator I = PointerMap.find(PtrVal);
   if (I == PointerMap.end()) return;  // Noop