diff options
-rw-r--r-- | llvm/include/llvm/ADT/SmallVector.h | 5 | ||||
-rw-r--r-- | llvm/lib/Support/SmallVector.cpp | 4 |
2 files changed, 5 insertions, 4 deletions
diff --git a/llvm/include/llvm/ADT/SmallVector.h b/llvm/include/llvm/ADT/SmallVector.h index e6e3aa82569..240139c298f 100644 --- a/llvm/include/llvm/ADT/SmallVector.h +++ b/llvm/include/llvm/ADT/SmallVector.h @@ -858,10 +858,7 @@ template <typename T> struct SmallVectorStorage<T, 0> {}; /// Note that this does not attempt to be exception safe. /// template <typename T, unsigned N> -class SmallVector : public SmallVectorImpl<T> { - /// Inline space for elements which aren't stored in the base class. - SmallVectorStorage<T, N> Storage; - +class SmallVector : public SmallVectorImpl<T>, SmallVectorStorage<T, N> { public: SmallVector() : SmallVectorImpl<T>(N) {} diff --git a/llvm/lib/Support/SmallVector.cpp b/llvm/lib/Support/SmallVector.cpp index ccab4a125aa..e8e3498968c 100644 --- a/llvm/lib/Support/SmallVector.cpp +++ b/llvm/lib/Support/SmallVector.cpp @@ -14,6 +14,10 @@ #include "llvm/ADT/SmallVector.h" using namespace llvm; +// Check that no bytes are wasted. +static_assert(sizeof(SmallVector<void *, 1>) == sizeof(void *) * 4, + "wasted space in SmallVector size 1; missing EBO?"); + /// grow_pod - This is an implementation of the grow() method which only works /// on POD-like datatypes and is out of line to reduce code duplication. void SmallVectorBase::grow_pod(void *FirstEl, size_t MinSizeInBytes, |