[clang] 2ef9033 - [clang][bytecode] Use InterpState's allocator in DynamicAllocator (#224893)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Sep 20 03:17:01 PDT 2026
Author: Timm Baeder
Date: 2026-09-20T12:16:55+02:00
New Revision: 2ef90337355eee4384d4ac61bf038175a24583ab
URL: https://github.com/llvm/llvm-project/commit/2ef90337355eee4384d4ac61bf038175a24583ab
DIFF: https://github.com/llvm/llvm-project/commit/2ef90337355eee4384d4ac61bf038175a24583ab.diff
LOG: [clang][bytecode] Use InterpState's allocator in DynamicAllocator (#224893)
This saves us yet another BumpPtrAllocator.
Added:
Modified:
clang/lib/AST/ByteCode/DynamicAllocator.h
clang/lib/AST/ByteCode/InterpState.h
Removed:
################################################################################
diff --git a/clang/lib/AST/ByteCode/DynamicAllocator.h b/clang/lib/AST/ByteCode/DynamicAllocator.h
index 2336c3f3316c3..cc6a315083b61 100644
--- a/clang/lib/AST/ByteCode/DynamicAllocator.h
+++ b/clang/lib/AST/ByteCode/DynamicAllocator.h
@@ -62,7 +62,8 @@ class DynamicAllocator final {
};
public:
- DynamicAllocator() = default;
+ DynamicAllocator(llvm::BumpPtrAllocator &DescAlloc)
+ : DescAllocator(DescAlloc) {}
DynamicAllocator(DynamicAllocator &) = delete;
DynamicAllocator(DynamicAllocator &&) = delete;
~DynamicAllocator();
@@ -105,8 +106,7 @@ class DynamicAllocator final {
// to them.
llvm::SmallVector<Allocation> DeadAllocations;
- using PoolAllocTy = llvm::BumpPtrAllocator;
- PoolAllocTy DescAllocator;
+ llvm::BumpPtrAllocator &DescAllocator;
/// Allocates a new descriptor.
template <typename... Ts> Descriptor *allocateDescriptor(Ts &&...Args) {
diff --git a/clang/lib/AST/ByteCode/InterpState.h b/clang/lib/AST/ByteCode/InterpState.h
index 920197d8021c0..91d0c5be2bb0c 100644
--- a/clang/lib/AST/ByteCode/InterpState.h
+++ b/clang/lib/AST/ByteCode/InterpState.h
@@ -80,7 +80,9 @@ class InterpState final : public State {
DynamicAllocator &getAllocator() {
if (!Alloc) {
- Alloc = std::make_unique<DynamicAllocator>();
+ if (!Allocator)
+ Allocator.emplace();
+ Alloc = std::make_unique<DynamicAllocator>(*Allocator);
}
return *Alloc;
@@ -223,10 +225,10 @@ class InterpState final : public State {
DeadBlock *DeadBlocks = nullptr;
/// Reference to the offset-source mapping.
SourceMapper *M;
- /// Allocator used for dynamic allocations performed via the program.
- std::unique_ptr<DynamicAllocator> Alloc;
/// Allocator for everything else, e.g. floating-point values.
mutable std::optional<llvm::BumpPtrAllocator> Allocator;
+ /// Allocator used for dynamic allocations performed via the program.
+ std::unique_ptr<DynamicAllocator> Alloc;
/// Diagnose that we've reached the constexpr step limit.
bool diagnoseStepLimitExceeded(CodePtr OpPC);
More information about the cfe-commits
mailing list