It seems safer to have the SSANames map take trees to AssertingVH's
rather than Value*'s.  It's still not completely clear to me whether
a value defining an SSAName can be deleted out from under us, so best
to check. 

llvm-svn: 82691
diff --git a/dragonegg/llvm-backend.cpp b/dragonegg/llvm-backend.cpp
index e20d0cc..be76684 100644
--- a/dragonegg/llvm-backend.cpp
+++ b/dragonegg/llvm-backend.cpp
@@ -1788,8 +1788,11 @@
   calculate_dominance_info(CDI_DOMINATORS);
 
   // Convert the AST to raw/ugly LLVM code.
-  TreeToLLVM Emitter(current_function_decl);
-  Function *Fn = Emitter.EmitFunction();
+  Function *Fn;
+  {
+    TreeToLLVM Emitter(current_function_decl);
+    Fn = Emitter.EmitFunction();
+  }
 
   // Free dominator and other ssa data structures.
   execute_free_datastructures();
diff --git a/dragonegg/llvm-convert.cpp b/dragonegg/llvm-convert.cpp
index 8e443c3..ff87a30 100644
--- a/dragonegg/llvm-convert.cpp
+++ b/dragonegg/llvm-convert.cpp
@@ -38,6 +38,7 @@
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/MathExtras.h"
+#include "llvm/Support/ValueHandle.h"
 #include "llvm/Support/raw_ostream.h"
 #include "llvm/Target/TargetData.h"
 #include "llvm/Target/TargetLowering.h"
@@ -2106,7 +2107,7 @@
 
 /// EmitSSA_NAME - Return the defining value of the given SSA_NAME.
 Value *TreeToLLVM::EmitSSA_NAME(tree exp) {
-  DenseMap<tree, Value*>::iterator I = SSANames.find(exp);
+  DenseMap<tree, AssertingVH<> >::iterator I = SSANames.find(exp);
   if (I != SSANames.end())
     return I->second;
 
diff --git a/dragonegg/llvm-internal.h b/dragonegg/llvm-internal.h
index 563bd3b..1e8ed8c 100644
--- a/dragonegg/llvm-internal.h
+++ b/dragonegg/llvm-internal.h
@@ -63,6 +63,7 @@
   class TargetMachine;
   class TargetData;
   class DebugInfo;
+  template<typename> class AssertingVH;
 }
 using namespace llvm;
 
@@ -350,7 +351,7 @@
   SmallVector<PhiRecord, 16> PendingPhis;
 
   // SSANames - Map from GCC ssa names to the defining LLVM value.
-  DenseMap<tree, Value*> SSANames;
+  DenseMap<tree, AssertingVH<> > SSANames;
 
   //===---------------------- Exception Handling --------------------------===//