[llvm] 6ea395e - [libc++abi] Prevent zero-capacity PODSmallVector (#215386)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 12 05:14:44 PDT 2026
Author: Zaara Syeda
Date: 2026-08-12T08:14:40-04:00
New Revision: 6ea395e4fe4db26920d57779ddae98eac6ba945d
URL: https://github.com/llvm/llvm-project/commit/6ea395e4fe4db26920d57779ddae98eac6ba945d
DIFF: https://github.com/llvm/llvm-project/commit/6ea395e4fe4db26920d57779ddae98eac6ba945d.diff
LOG: [libc++abi] Prevent zero-capacity PODSmallVector (#215386)
Require PODSmallVector to have a non-zero inline capacity.
PODSmallVector<T, 0> can reach reserve(0) when growing from
an empty vector, leaving the capacity at zero. Add a static_assert
requiring N > 0 to prevent this unsupported configuration.
Added:
Modified:
libcxxabi/src/demangle/ItaniumDemangle.h
llvm/include/llvm/Demangle/ItaniumDemangle.h
Removed:
################################################################################
diff --git a/libcxxabi/src/demangle/ItaniumDemangle.h b/libcxxabi/src/demangle/ItaniumDemangle.h
index 2ae943e1998f1..842b9614d9ff7 100644
--- a/libcxxabi/src/demangle/ItaniumDemangle.h
+++ b/libcxxabi/src/demangle/ItaniumDemangle.h
@@ -43,6 +43,7 @@ template <class T, size_t N> class PODSmallVector {
"T is required to be a trivially copyable type");
static_assert(std::is_trivially_default_constructible<T>::value,
"T is required to be trivially default constructible");
+ static_assert(N > 0, "PODSmallVector requires a non-zero inline capacity");
T *First = nullptr;
T *Last = nullptr;
T *Cap = nullptr;
diff --git a/llvm/include/llvm/Demangle/ItaniumDemangle.h b/llvm/include/llvm/Demangle/ItaniumDemangle.h
index 0f1deb3d710e2..83c76c6088339 100644
--- a/llvm/include/llvm/Demangle/ItaniumDemangle.h
+++ b/llvm/include/llvm/Demangle/ItaniumDemangle.h
@@ -43,6 +43,7 @@ template <class T, size_t N> class PODSmallVector {
"T is required to be a trivially copyable type");
static_assert(std::is_trivially_default_constructible<T>::value,
"T is required to be trivially default constructible");
+ static_assert(N > 0, "PODSmallVector requires a non-zero inline capacity");
T *First = nullptr;
T *Last = nullptr;
T *Cap = nullptr;
More information about the llvm-commits
mailing list