summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/Support/TrailingObjects.h6
-rw-r--r--llvm/lib/IR/AttributeImpl.h4
-rw-r--r--llvm/unittests/Support/TrailingObjectsTest.cpp2
3 files changed, 11 insertions, 1 deletions
diff --git a/llvm/include/llvm/Support/TrailingObjects.h b/llvm/include/llvm/Support/TrailingObjects.h
index 6c721f267be..2bd25ace4f5 100644
--- a/llvm/include/llvm/Support/TrailingObjects.h
+++ b/llvm/include/llvm/Support/TrailingObjects.h
@@ -290,9 +290,13 @@ class TrailingObjects : private trailing_objects_internal::TrailingObjectsImpl<
}
public:
- // make this (privately inherited) class public.
+ // Make this (privately inherited) member public.
using ParentType::OverloadToken;
+ /// Disable sized deallocation for all objects with trailing object storage;
+ /// the inferred size will typically not be correct.
+ void operator delete(void *P) { return ::operator delete(P); }
+
/// Returns a pointer to the trailing object array of the given type
/// (which must be one of those specified in the class template). The
/// array may have zero or more elements in it.
diff --git a/llvm/lib/IR/AttributeImpl.h b/llvm/lib/IR/AttributeImpl.h
index ca7ae5cbb29..e87f4f7e5c8 100644
--- a/llvm/lib/IR/AttributeImpl.h
+++ b/llvm/lib/IR/AttributeImpl.h
@@ -171,6 +171,8 @@ class AttributeSetNode final
void operator=(const AttributeSetNode &) = delete;
AttributeSetNode(const AttributeSetNode &) = delete;
public:
+ void operator delete(void *p) { TrailingObjects::operator delete(p); }
+
static AttributeSetNode *get(LLVMContext &C, ArrayRef<Attribute> Attrs);
bool hasAttribute(Attribute::AttrKind Kind) const {
@@ -266,6 +268,8 @@ public:
}
}
+ void operator delete(void *p) { TrailingObjects::operator delete(p); }
+
/// \brief Get the context that created this AttributeSetImpl.
LLVMContext &getContext() { return Context; }
diff --git a/llvm/unittests/Support/TrailingObjectsTest.cpp b/llvm/unittests/Support/TrailingObjectsTest.cpp
index 170cbc372b8..282f402ec8e 100644
--- a/llvm/unittests/Support/TrailingObjectsTest.cpp
+++ b/llvm/unittests/Support/TrailingObjectsTest.cpp
@@ -34,6 +34,7 @@ public:
void *Mem = ::operator new(totalSizeToAlloc<short>(NumShorts));
return new (Mem) Class1(ShortArray, NumShorts);
}
+ void operator delete(void *p) { TrailingObjects::operator delete(p); }
short get(unsigned Num) const { return getTrailingObjects<short>()[Num]; }
@@ -78,6 +79,7 @@ public:
*C->getTrailingObjects<double>() = D;
return C;
}
+ void operator delete(void *p) { TrailingObjects::operator delete(p); }
short getShort() const {
if (!HasShort)
OpenPOWER on IntegriCloud