diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index 3de8156..6c0cc7e 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -320,8 +320,7 @@
 void CodeGenModule::AddUsedGlobal(llvm::GlobalValue *GV) {
   assert(!GV->isDeclaration() && 
          "Only globals with definition can force usage.");
-  llvm::Type *i8PTy = llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
-  LLVMUsed.push_back(llvm::ConstantExpr::getBitCast(GV, i8PTy));
+  LLVMUsed.push_back(GV);
 }
 
 void CodeGenModule::EmitLLVMUsed() {
@@ -329,12 +328,21 @@
   if (LLVMUsed.empty())
     return;
 
-  llvm::ArrayType *ATy = llvm::ArrayType::get(LLVMUsed[0]->getType(), 
-                                              LLVMUsed.size());
+  llvm::Type *i8PTy = llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
+  llvm::ArrayType *ATy = llvm::ArrayType::get(i8PTy, LLVMUsed.size());
+  
+  // Convert LLVMUsed to what ConstantArray needs.
+  std::vector<llvm::Constant*> UsedArray;
+  UsedArray.resize(LLVMUsed.size());
+  for (unsigned i = 0, e = LLVMUsed.size(); i != e; ++i) {
+    UsedArray[i] = 
+     llvm::ConstantExpr::getBitCast(cast<llvm::Constant>(&*LLVMUsed[i]), i8PTy);
+  }
+  
   llvm::GlobalVariable *GV = 
     new llvm::GlobalVariable(ATy, false, 
                              llvm::GlobalValue::AppendingLinkage,
-                             llvm::ConstantArray::get(ATy, LLVMUsed),
+                             llvm::ConstantArray::get(ATy, UsedArray),
                              "llvm.used", &getModule());
 
   GV->setSection("llvm.metadata");
@@ -725,7 +733,6 @@
     Entry->replaceAllUsesWith(NewPtrForOldDecl);
 
     // Erase the old global, since it is no longer used.
-    // FIXME: What if it was attribute used?  Dangling pointer from LLVMUsed.
     cast<llvm::GlobalValue>(Entry)->eraseFromParent();
   }
 
@@ -839,8 +846,6 @@
     Entry->replaceAllUsesWith(NewPtrForOldDecl);
     
     // Ok, delete the old function now, which is dead.
-    // FIXME: If it was attribute(used) the pointer will dangle from the
-    // LLVMUsed array!
     cast<llvm::GlobalValue>(Entry)->eraseFromParent();
     
     Entry = NewFn;
@@ -905,7 +910,6 @@
     
     Entry->replaceAllUsesWith(llvm::ConstantExpr::getBitCast(GA,
                                                           Entry->getType()));
-    // FIXME: What if it was attribute used?  Dangling pointer from LLVMUsed.
     Entry->eraseFromParent();
   }
   
diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h
index dbfbf02..01b8d02 100644
--- a/lib/CodeGen/CodeGenModule.h
+++ b/lib/CodeGen/CodeGenModule.h
@@ -21,6 +21,7 @@
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/StringMap.h"
 #include "llvm/ADT/StringSet.h"
+#include "llvm/Support/ValueHandle.h"
 #include <list>
 
 namespace llvm {
@@ -119,7 +120,7 @@
   /// present in the object file; bitcast to i8*. This is used for
   /// forcing visibility of symbols which may otherwise be optimized
   /// out.
-  std::vector<llvm::Constant*> LLVMUsed;
+  std::vector<llvm::WeakVH> LLVMUsed;
 
   /// GlobalCtors - Store the list of global constructors and their respective
   /// priorities to be emitted when the translation unit is complete.
