summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2014-11-25 02:26:22 +0000
committerDavid Blaikie <dblaikie@gmail.com>2014-11-25 02:26:22 +0000
commitcb2818fa7630741e03beb352f1df773f238a40d8 (patch)
treed57be3581f7f1038b9d988b67d5d74d3e1ca841d /llvm/lib
parent899b85a556e5493beea0ef0d914d5a454e6b1a81 (diff)
downloadbcm5719-llvm-cb2818fa7630741e03beb352f1df773f238a40d8.tar.gz
bcm5719-llvm-cb2818fa7630741e03beb352f1df773f238a40d8.zip
Revert "unique_ptrify LLVMContextImpl::CAZConstants"
Missed the complexities of how these elements are destroyed. This reverts commit r222714. llvm-svn: 222715
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/IR/Constants.cpp8
-rw-r--r--llvm/lib/IR/LLVMContextImpl.cpp2
-rw-r--r--llvm/lib/IR/LLVMContextImpl.h5
3 files changed, 6 insertions, 9 deletions
diff --git a/llvm/lib/IR/Constants.cpp b/llvm/lib/IR/Constants.cpp
index bc51be6259b..e0cb835c2c6 100644
--- a/llvm/lib/IR/Constants.cpp
+++ b/llvm/lib/IR/Constants.cpp
@@ -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.
diff --git a/llvm/lib/IR/LLVMContextImpl.cpp b/llvm/lib/IR/LLVMContextImpl.cpp
index 1335b3d33b8..3fd0bb37a4d 100644
--- a/llvm/lib/IR/LLVMContextImpl.cpp
+++ b/llvm/lib/IR/LLVMContextImpl.cpp
@@ -87,7 +87,7 @@ LLVMContextImpl::~LLVMContextImpl() {
ArrayConstants.freeConstants();
StructConstants.freeConstants();
VectorConstants.freeConstants();
- CAZConstants.clear();
+ DeleteContainerSeconds(CAZConstants);
DeleteContainerSeconds(CPNConstants);
DeleteContainerSeconds(UVConstants);
InlineAsms.freeConstants();
diff --git a/llvm/lib/IR/LLVMContextImpl.h b/llvm/lib/IR/LLVMContextImpl.h
index 65d6774e335..7a298cfecf3 100644
--- a/llvm/lib/IR/LLVMContextImpl.h
+++ b/llvm/lib/IR/LLVMContextImpl.h
@@ -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;
OpenPOWER on IntegriCloud