Author: Paul Kirth Date: 2026-04-03T21:28:18Z New Revision: 64987a9cccd62c082c6271e7c815794a61cdcad3
URL: https://github.com/llvm/llvm-project/commit/64987a9cccd62c082c6271e7c815794a61cdcad3 DIFF: https://github.com/llvm/llvm-project/commit/64987a9cccd62c082c6271e7c815794a61cdcad3.diff LOG: [clang-doc] Enforce arena allocated types are trivially destructible (#190049) We can enforce at compile-time that the types we want to place in the arenas are always safe to allocate there. Added: Modified: clang-tools-extra/clang-doc/Representation.h Removed: ################################################################################ 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
