https://github.com/ilovepi updated https://github.com/llvm/llvm-project/pull/190049
>From c5271ef4bbed1aa9edf2affb0e68716bd37afbdc Mon Sep 17 00:00:00 2001 From: Paul Kirth <[email protected]> Date: Sat, 21 Mar 2026 02:37:40 +0000 Subject: [PATCH] [clang-doc] Enforce arena allocated types are trivially destructible We can enforce at compile-time that the types we want to place in the arenas are always safe to allocate there. --- clang-tools-extra/clang-doc/Representation.h | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/clang-tools-extra/clang-doc/Representation.h b/clang-tools-extra/clang-doc/Representation.h index f54d94ba84aaf..aa298f99db1ea 100644 --- a/clang-tools-extra/clang-doc/Representation.h +++ b/clang-tools-extra/clang-doc/Representation.h @@ -757,6 +757,32 @@ struct ClangDocContext { bool FTimeTrace; // Indicates if ftime trace is turned on }; +// Ensure arena allocated types remain safe to allocate in the arena. +// Only trivially destructible types are safe, so enforce that at compile-time. +static_assert(std::is_trivially_destructible_v<ConstraintInfo>); +static_assert(std::is_trivially_destructible_v<FieldTypeInfo>); +static_assert(std::is_trivially_destructible_v<Location>); +static_assert(std::is_trivially_destructible_v<Reference>); +static_assert(std::is_trivially_destructible_v<TemplateParamInfo>); +static_assert(std::is_trivially_destructible_v<TypeInfo>); + +// FIXME: These types need to be trivially destructible for arena allocation. +static_assert(!std::is_trivially_destructible_v<CommentInfo>); +static_assert(!std::is_trivially_destructible_v<ConceptInfo>); +static_assert(!std::is_trivially_destructible_v<EnumInfo>); +static_assert(!std::is_trivially_destructible_v<FriendInfo>); +static_assert(!std::is_trivially_destructible_v<FunctionInfo>); +static_assert(!std::is_trivially_destructible_v<Info>); +static_assert(!std::is_trivially_destructible_v<MemberTypeInfo>); +static_assert(!std::is_trivially_destructible_v<NamespaceInfo>); +static_assert(!std::is_trivially_destructible_v<RecordInfo>); +static_assert(!std::is_trivially_destructible_v<ScopeChildren>); +static_assert(!std::is_trivially_destructible_v<SymbolInfo>); +static_assert(!std::is_trivially_destructible_v<TemplateInfo>); +static_assert(!std::is_trivially_destructible_v<TemplateSpecializationInfo>); +static_assert(!std::is_trivially_destructible_v<TypedefInfo>); +static_assert(!std::is_trivially_destructible_v<VarInfo>); + } // namespace doc } // namespace clang _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
