Revert "unique_ptrify LLVMContextImpl::CAZConstants"
authorDavid Blaikie <dblaikie@gmail.com>
Tue, 25 Nov 2014 02:26:22 +0000 (02:26 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Tue, 25 Nov 2014 02:26:22 +0000 (02:26 +0000)
Missed the complexities of how these elements are destroyed.

This reverts commit r222714.

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

lib/IR/Constants.cpp
lib/IR/LLVMContextImpl.cpp
lib/IR/LLVMContextImpl.h

index bc51be6259b42ab1431482df45d4179adddb8b55..e0cb835c2c675eb5940501102946dad066dd4627 100644 (file)
@@ -1330,12 +1330,12 @@ bool ConstantFP::isValueValidForType(Type *Ty, const APFloat& Val) {
 ConstantAggregateZero *ConstantAggregateZero::get(Type *Ty) {
   assert((Ty->isStructTy() || Ty->isArrayTy() || Ty->isVectorTy()) &&
          "Cannot create an aggregate zero of non-aggregate type!");
-
-  auto &Entry = Ty->getContext().pImpl->CAZConstants[Ty];
+  
+  ConstantAggregateZero *&Entry = Ty->getContext().pImpl->CAZConstants[Ty];
   if (!Entry)
-    Entry.reset(new ConstantAggregateZero(Ty));
+    Entry = new ConstantAggregateZero(Ty);
 
-  return Entry.get();
+  return Entry;
 }
 
 /// destroyConstant - Remove the constant from the constant table.
index 1335b3d33b8a7c9478c5ae6062b17452b496f4be..3fd0bb37a4d48f71218f3635e8488ef84722a654 100644 (file)
@@ -87,7 +87,7 @@ LLVMContextImpl::~LLVMContextImpl() {
   ArrayConstants.freeConstants();
   StructConstants.freeConstants();
   VectorConstants.freeConstants();
-  CAZConstants.clear();
+  DeleteContainerSeconds(CAZConstants);
   DeleteContainerSeconds(CPNConstants);
   DeleteContainerSeconds(UVConstants);
   InlineAsms.freeConstants();
index 65d6774e3357c30acb4ba9890f777450b4169980..7a298cfecf31cf27e19253bf755adcf4805cf3bb 100644 (file)
@@ -299,10 +299,7 @@ public:
   // on Context destruction.
   SmallPtrSet<GenericMDNode *, 1> NonUniquedMDNodes;
 
-  // Value is indirected through pointer to keep pointer validity over mutations
-  // of this map. Replace if/when we have an efficient map that guarantees
-  // pointer validity over mutations.
-  DenseMap<Type*, std::unique_ptr<ConstantAggregateZero>> CAZConstants;
+  DenseMap<Type*, ConstantAggregateZero*> CAZConstants;
 
   typedef ConstantUniqueMap<ConstantArray> ArrayConstantsTy;
   ArrayConstantsTy ArrayConstants;