summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2016-12-18 14:06:06 +0000
committerRui Ueyama <ruiu@google.com>2016-12-18 14:06:06 +0000
commit9381eb104563cacdded3c4597d0845707b02737e (patch)
tree74322e968e70c7ca15158f504424d84d0ae04864
parenta26bc91456865f8cd039c9ebd72def3a0b4a80f1 (diff)
downloadbcm5719-llvm-9381eb104563cacdded3c4597d0845707b02737e.tar.gz
bcm5719-llvm-9381eb104563cacdded3c4597d0845707b02737e.zip
Remove lld/Support/Memory.h.
I thought for a while about how to remove it, but it looks like we can just copy the file for now. Of course I'm not happy about that, but it's just less than 50 lines of code, and we already have duplicate code in Error.h and some other places. I want to solve them all at once later. Differential Revision: https://reviews.llvm.org/D27819 llvm-svn: 290062
-rw-r--r--lld/COFF/CMakeLists.txt1
-rw-r--r--lld/COFF/Driver.cpp6
-rw-r--r--lld/COFF/DriverUtils.cpp2
-rw-r--r--lld/COFF/InputFiles.cpp6
-rw-r--r--lld/COFF/Memory.h52
-rw-r--r--lld/COFF/ModuleDef.cpp2
-rw-r--r--lld/COFF/SymbolTable.cpp2
-rw-r--r--lld/COFF/Symbols.cpp2
-rw-r--r--lld/COFF/Symbols.h2
-rw-r--r--lld/COFF/Writer.cpp2
-rw-r--r--lld/ELF/CMakeLists.txt1
-rw-r--r--lld/ELF/Driver.cpp6
-rw-r--r--lld/ELF/DriverUtils.cpp2
-rw-r--r--lld/ELF/InputFiles.cpp2
-rw-r--r--lld/ELF/InputSection.cpp2
-rw-r--r--lld/ELF/LinkerScript.cpp2
-rw-r--r--lld/ELF/Memory.h67
-rw-r--r--lld/ELF/OutputSections.cpp2
-rw-r--r--lld/ELF/SymbolTable.cpp2
-rw-r--r--lld/ELF/SyntheticSections.cpp2
-rw-r--r--lld/ELF/Target.cpp2
-rw-r--r--lld/ELF/Thunks.cpp2
-rw-r--r--lld/ELF/Writer.cpp2
-rw-r--r--lld/include/lld/Support/Memory.h8
-rw-r--r--lld/lib/CMakeLists.txt1
-rw-r--r--lld/lib/Support/CMakeLists.txt9
-rw-r--r--lld/lib/Support/Memory.cpp27
27 files changed, 154 insertions, 62 deletions
diff --git a/lld/COFF/CMakeLists.txt b/lld/COFF/CMakeLists.txt
index a0ff9c52840..70a33b9fdd8 100644
--- a/lld/COFF/CMakeLists.txt
+++ b/lld/COFF/CMakeLists.txt
@@ -40,7 +40,6 @@ add_lld_library(lldCOFF
LINK_LIBS
lldCore
- lldSupport
${PTHREAD_LIB}
DEPENDS
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index e2b5e4939d7..dc3a00ba55e 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -11,11 +11,11 @@
#include "Config.h"
#include "Error.h"
#include "InputFiles.h"
+#include "Memory.h"
#include "SymbolTable.h"
#include "Symbols.h"
#include "Writer.h"
#include "lld/Driver/Driver.h"
-#include "lld/Support/Memory.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/LibDriver/LibDriver.h"
@@ -50,6 +50,10 @@ namespace coff {
Configuration *Config;
LinkerDriver *Driver;
+BumpPtrAllocator BAlloc;
+StringSaver Saver{BAlloc};
+std::vector<SpecificAllocBase *> SpecificAllocBase::Instances;
+
bool link(ArrayRef<const char *> Args) {
Config = make<Configuration>();
Driver = make<LinkerDriver>();
diff --git a/lld/COFF/DriverUtils.cpp b/lld/COFF/DriverUtils.cpp
index cca185d4065..14dd004f1c0 100644
--- a/lld/COFF/DriverUtils.cpp
+++ b/lld/COFF/DriverUtils.cpp
@@ -16,8 +16,8 @@
#include "Config.h"
#include "Driver.h"
#include "Error.h"
+#include "Memory.h"
#include "Symbols.h"
-#include "lld/Support/Memory.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Object/COFF.h"
diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp
index 14846456cb3..0a97c2185f8 100644
--- a/lld/COFF/InputFiles.cpp
+++ b/lld/COFF/InputFiles.cpp
@@ -7,14 +7,15 @@
//
//===----------------------------------------------------------------------===//
+#include "InputFiles.h"
#include "Chunks.h"
#include "Config.h"
#include "Driver.h"
#include "Error.h"
-#include "InputFiles.h"
+#include "Memory.h"
#include "SymbolTable.h"
#include "Symbols.h"
-#include "lld/Support/Memory.h"
+#include "llvm-c/lto.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Triple.h"
#include "llvm/ADT/Twine.h"
@@ -29,7 +30,6 @@
#include "llvm/Support/ErrorOr.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Target/TargetOptions.h"
-#include "llvm-c/lto.h"
#include <cstring>
#include <system_error>
#include <utility>
diff --git a/lld/COFF/Memory.h b/lld/COFF/Memory.h
new file mode 100644
index 00000000000..526f11344a0
--- /dev/null
+++ b/lld/COFF/Memory.h
@@ -0,0 +1,52 @@
+//===- Memory.h -------------------------------------------------*- C++ -*-===//
+//
+// The LLVM Linker
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// See ELF/Memory.h
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLD_COFF_MEMORY_H
+#define LLD_COFF_MEMORY_H
+
+#include "llvm/Support/Allocator.h"
+#include "llvm/Support/StringSaver.h"
+#include <vector>
+
+namespace lld {
+namespace coff {
+
+extern llvm::BumpPtrAllocator BAlloc;
+extern llvm::StringSaver Saver;
+
+struct SpecificAllocBase {
+ SpecificAllocBase() { Instances.push_back(this); }
+ virtual ~SpecificAllocBase() = default;
+ virtual void reset() = 0;
+ static std::vector<SpecificAllocBase *> Instances;
+};
+
+template <class T> struct SpecificAlloc : public SpecificAllocBase {
+ void reset() override { Alloc.DestroyAll(); }
+ llvm::SpecificBumpPtrAllocator<T> Alloc;
+};
+
+template <typename T, typename... U> T *make(U &&... Args) {
+ static SpecificAlloc<T> Alloc;
+ return new (Alloc.Alloc.Allocate()) T(std::forward<U>(Args)...);
+}
+
+inline void freeArena() {
+ for (SpecificAllocBase *Alloc : SpecificAllocBase::Instances)
+ Alloc->reset();
+ BAlloc.Reset();
+}
+}
+}
+
+#endif
diff --git a/lld/COFF/ModuleDef.cpp b/lld/COFF/ModuleDef.cpp
index 6c8ef71395a..a273b6f535d 100644
--- a/lld/COFF/ModuleDef.cpp
+++ b/lld/COFF/ModuleDef.cpp
@@ -18,7 +18,7 @@
#include "Config.h"
#include "Error.h"
-#include "lld/Support/Memory.h"
+#include "Memory.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/StringSaver.h"
diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp
index a39bcd2215b..9cc0b75c151 100644
--- a/lld/COFF/SymbolTable.cpp
+++ b/lld/COFF/SymbolTable.cpp
@@ -11,8 +11,8 @@
#include "Config.h"
#include "Driver.h"
#include "Error.h"
+#include "Memory.h"
#include "Symbols.h"
-#include "lld/Support/Memory.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/LTO/legacy/LTOCodeGenerator.h"
#include "llvm/Support/Debug.h"
diff --git a/lld/COFF/Symbols.cpp b/lld/COFF/Symbols.cpp
index a8ec4ffd5bc..6de85d581f4 100644
--- a/lld/COFF/Symbols.cpp
+++ b/lld/COFF/Symbols.cpp
@@ -10,8 +10,8 @@
#include "Symbols.h"
#include "Error.h"
#include "InputFiles.h"
+#include "Memory.h"
#include "Strings.h"
-#include "lld/Support/Memory.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
diff --git a/lld/COFF/Symbols.h b/lld/COFF/Symbols.h
index 506489b4175..bc9ad4aa8af 100644
--- a/lld/COFF/Symbols.h
+++ b/lld/COFF/Symbols.h
@@ -12,8 +12,8 @@
#include "Chunks.h"
#include "Config.h"
+#include "Memory.h"
#include "lld/Core/LLVM.h"
-#include "lld/Support/Memory.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/Object/Archive.h"
#include "llvm/Object/COFF.h"
diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp
index 98fd6c4470c..ae18eb4a80f 100644
--- a/lld/COFF/Writer.cpp
+++ b/lld/COFF/Writer.cpp
@@ -12,11 +12,11 @@
#include "DLL.h"
#include "Error.h"
#include "InputFiles.h"
+#include "Memory.h"
#include "PDB.h"
#include "SymbolTable.h"
#include "Symbols.h"
#include "lld/Core/Parallel.h"
-#include "lld/Support/Memory.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringSwitch.h"
diff --git a/lld/ELF/CMakeLists.txt b/lld/ELF/CMakeLists.txt
index c7c2bf5c331..2e9d2b941fd 100644
--- a/lld/ELF/CMakeLists.txt
+++ b/lld/ELF/CMakeLists.txt
@@ -53,7 +53,6 @@ add_lld_library(lldELF
LINK_LIBS
lldConfig
lldCore
- lldSupport
${PTHREAD_LIB}
DEPENDS
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 67f067847c0..521b6182e28 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -14,6 +14,7 @@
#include "InputFiles.h"
#include "InputSection.h"
#include "LinkerScript.h"
+#include "Memory.h"
#include "Strings.h"
#include "SymbolTable.h"
#include "Target.h"
@@ -21,7 +22,6 @@
#include "Writer.h"
#include "lld/Config/Version.h"
#include "lld/Driver/Driver.h"
-#include "lld/Support/Memory.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/CommandLine.h"
@@ -42,6 +42,10 @@ using namespace lld::elf;
Configuration *elf::Config;
LinkerDriver *elf::Driver;
+BumpPtrAllocator elf::BAlloc;
+StringSaver elf::Saver{BAlloc};
+std::vector<SpecificAllocBase *> elf::SpecificAllocBase::Instances;
+
bool elf::link(ArrayRef<const char *> Args, bool CanExitEarly,
raw_ostream &Error) {
ErrorCount = 0;
diff --git a/lld/ELF/DriverUtils.cpp b/lld/ELF/DriverUtils.cpp
index 179dfd356e6..6a270a6d09d 100644
--- a/lld/ELF/DriverUtils.cpp
+++ b/lld/ELF/DriverUtils.cpp
@@ -15,10 +15,10 @@
#include "Driver.h"
#include "Error.h"
+#include "Memory.h"
#include "ScriptParser.h"
#include "lld/Config/Version.h"
#include "lld/Core/Reproduce.h"
-#include "lld/Support/Memory.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/Triple.h"
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp
index b7f1aea31e7..2a865992146 100644
--- a/lld/ELF/InputFiles.cpp
+++ b/lld/ELF/InputFiles.cpp
@@ -12,10 +12,10 @@
#include "Error.h"
#include "InputSection.h"
#include "LinkerScript.h"
+#include "Memory.h"
#include "SymbolTable.h"
#include "Symbols.h"
#include "SyntheticSections.h"
-#include "lld/Support/Memory.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Bitcode/BitcodeReader.h"
#include "llvm/CodeGen/Analysis.h"
diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp
index 8382a6b7085..963995e3d74 100644
--- a/lld/ELF/InputSection.cpp
+++ b/lld/ELF/InputSection.cpp
@@ -13,12 +13,12 @@
#include "Error.h"
#include "InputFiles.h"
#include "LinkerScript.h"
+#include "Memory.h"
#include "OutputSections.h"
#include "Relocations.h"
#include "SyntheticSections.h"
#include "Target.h"
#include "Thunks.h"
-#include "lld/Support/Memory.h"
#include "llvm/Support/Compression.h"
#include "llvm/Support/Endian.h"
#include <mutex>
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp
index 7387c9c2590..ab6435c5482 100644
--- a/lld/ELF/LinkerScript.cpp
+++ b/lld/ELF/LinkerScript.cpp
@@ -15,6 +15,7 @@
#include "Config.h"
#include "Driver.h"
#include "InputSection.h"
+#include "Memory.h"
#include "OutputSections.h"
#include "ScriptParser.h"
#include "Strings.h"
@@ -23,7 +24,6 @@
#include "SyntheticSections.h"
#include "Target.h"
#include "Writer.h"
-#include "lld/Support/Memory.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringRef.h"
diff --git a/lld/ELF/Memory.h b/lld/ELF/Memory.h
new file mode 100644
index 00000000000..e5a04ed1e5a
--- /dev/null
+++ b/lld/ELF/Memory.h
@@ -0,0 +1,67 @@
+//===- Memory.h -------------------------------------------------*- C++ -*-===//
+//
+// The LLVM Linker
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines arena allocators.
+//
+// Almost all large objects, such as files, sections or symbols, are
+// used for the entire lifetime of the linker once they are created.
+// This usage characteristic makes arena allocator an attractive choice
+// where the entire linker is one arena. With an arena, newly created
+// objects belong to the arena and freed all at once when everything is done.
+// Arena allocators are efficient and easy to understand.
+// Most objects are allocated using the arena allocators defined by this file.
+//
+// If you edit this file, please edit COFF/Memory.h too.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLD_ELF_MEMORY_H
+#define LLD_ELF_MEMORY_H
+
+#include "llvm/Support/Allocator.h"
+#include "llvm/Support/StringSaver.h"
+#include <vector>
+
+namespace lld {
+namespace elf {
+
+// Use this arena if your object doesn't have a destructor.
+extern llvm::BumpPtrAllocator BAlloc;
+extern llvm::StringSaver Saver;
+
+// These two classes are hack to keep track of all
+// SpecificBumpPtrAllocator instances.
+struct SpecificAllocBase {
+ SpecificAllocBase() { Instances.push_back(this); }
+ virtual ~SpecificAllocBase() = default;
+ virtual void reset() = 0;
+ static std::vector<SpecificAllocBase *> Instances;
+};
+
+template <class T> struct SpecificAlloc : public SpecificAllocBase {
+ void reset() override { Alloc.DestroyAll(); }
+ llvm::SpecificBumpPtrAllocator<T> Alloc;
+};
+
+// Use this arena if your object has a destructor.
+// Your destructor will be invoked from freeArena().
+template <typename T, typename... U> T *make(U &&... Args) {
+ static SpecificAlloc<T> Alloc;
+ return new (Alloc.Alloc.Allocate()) T(std::forward<U>(Args)...);
+}
+
+inline void freeArena() {
+ for (SpecificAllocBase *Alloc : SpecificAllocBase::Instances)
+ Alloc->reset();
+ BAlloc.Reset();
+}
+}
+}
+
+#endif
diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp
index f8daa57fd85..cfb8ac9c568 100644
--- a/lld/ELF/OutputSections.cpp
+++ b/lld/ELF/OutputSections.cpp
@@ -11,12 +11,12 @@
#include "Config.h"
#include "EhFrame.h"
#include "LinkerScript.h"
+#include "Memory.h"
#include "Strings.h"
#include "SymbolTable.h"
#include "SyntheticSections.h"
#include "Target.h"
#include "Threads.h"
-#include "lld/Support/Memory.h"
#include "llvm/Support/Dwarf.h"
#include "llvm/Support/MD5.h"
#include "llvm/Support/MathExtras.h"
diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp
index 2d7273583c6..2578f6e9132 100644
--- a/lld/ELF/SymbolTable.cpp
+++ b/lld/ELF/SymbolTable.cpp
@@ -18,8 +18,8 @@
#include "Config.h"
#include "Error.h"
#include "LinkerScript.h"
+#include "Memory.h"
#include "Symbols.h"
-#include "lld/Support/Memory.h"
#include "llvm/ADT/STLExtras.h"
using namespace llvm;
diff --git a/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp
index 96a4f70f880..ea5e924e493 100644
--- a/lld/ELF/SyntheticSections.cpp
+++ b/lld/ELF/SyntheticSections.cpp
@@ -19,6 +19,7 @@
#include "Error.h"
#include "InputFiles.h"
#include "LinkerScript.h"
+#include "Memory.h"
#include "OutputSections.h"
#include "Strings.h"
#include "SymbolTable.h"
@@ -26,7 +27,6 @@
#include "Threads.h"
#include "Writer.h"
#include "lld/Config/Version.h"
-#include "lld/Support/Memory.h"
#include "llvm/Support/Dwarf.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/MD5.h"
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp
index cbb70d43913..9e292dc0b3d 100644
--- a/lld/ELF/Target.cpp
+++ b/lld/ELF/Target.cpp
@@ -27,12 +27,12 @@
#include "Target.h"
#include "Error.h"
#include "InputFiles.h"
+#include "Memory.h"
#include "OutputSections.h"
#include "Symbols.h"
#include "SyntheticSections.h"
#include "Thunks.h"
#include "Writer.h"
-#include "lld/Support/Memory.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/Object/ELF.h"
#include "llvm/Support/ELF.h"
diff --git a/lld/ELF/Thunks.cpp b/lld/ELF/Thunks.cpp
index e7a1efe35da..34b630ac251 100644
--- a/lld/ELF/Thunks.cpp
+++ b/lld/ELF/Thunks.cpp
@@ -25,10 +25,10 @@
#include "Config.h"
#include "Error.h"
#include "InputSection.h"
+#include "Memory.h"
#include "OutputSections.h"
#include "Symbols.h"
#include "Target.h"
-#include "lld/Support/Memory.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ELF.h"
#include "llvm/Support/Endian.h"
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index d1c1ecd2cc7..e8d517d211d 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -10,13 +10,13 @@
#include "Writer.h"
#include "Config.h"
#include "LinkerScript.h"
+#include "Memory.h"
#include "OutputSections.h"
#include "Relocations.h"
#include "Strings.h"
#include "SymbolTable.h"
#include "SyntheticSections.h"
#include "Target.h"
-#include "lld/Support/Memory.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/FileOutputBuffer.h"
diff --git a/lld/include/lld/Support/Memory.h b/lld/include/lld/Support/Memory.h
index 1ed5ec99c97..46db4a39f69 100644
--- a/lld/include/lld/Support/Memory.h
+++ b/lld/include/lld/Support/Memory.h
@@ -35,7 +35,7 @@ extern llvm::StringSaver Saver;
// These two classes are hack to keep track of all
// SpecificBumpPtrAllocator instances.
struct SpecificAllocBase {
- SpecificAllocBase();
+ SpecificAllocBase() { Instances.push_back(this); }
virtual ~SpecificAllocBase() = default;
virtual void reset() = 0;
static std::vector<SpecificAllocBase *> Instances;
@@ -53,7 +53,11 @@ template <typename T, typename... U> inline T *make(U &&... Args) {
return new (Alloc.Alloc.Allocate()) T(std::forward<U>(Args)...);
}
-void freeArena();
+inline void freeArena() {
+ for (SpecificAllocBase *Alloc : SpecificAllocBase::Instances)
+ Alloc->reset();
+ BAlloc.Reset();
+}
}
#endif
diff --git a/lld/lib/CMakeLists.txt b/lld/lib/CMakeLists.txt
index acd5322302f..699f5e93f8a 100644
--- a/lld/lib/CMakeLists.txt
+++ b/lld/lib/CMakeLists.txt
@@ -2,4 +2,3 @@ add_subdirectory(Config)
add_subdirectory(Core)
add_subdirectory(Driver)
add_subdirectory(ReaderWriter)
-add_subdirectory(Support)
diff --git a/lld/lib/Support/CMakeLists.txt b/lld/lib/Support/CMakeLists.txt
deleted file mode 100644
index 18dccdbc50c..00000000000
--- a/lld/lib/Support/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-add_lld_library(lldSupport
- Memory.cpp
-
- ADDITIONAL_HEADER_DIRS
- ${LLD_INCLUDE_DIR}/lld/Support
-
- LINK_LIBS
- LLVMSupport
-)
diff --git a/lld/lib/Support/Memory.cpp b/lld/lib/Support/Memory.cpp
deleted file mode 100644
index 9bdcdcc8fdb..00000000000
--- a/lld/lib/Support/Memory.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-//===- Memory.cpp -----------------------------------------------*- C++ -*-===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "lld/Support/Memory.h"
-
-using namespace llvm;
-
-namespace lld {
-BumpPtrAllocator BAlloc;
-StringSaver Saver{BAlloc};
-
-SpecificAllocBase::SpecificAllocBase() { Instances.push_back(this); }
-
-std::vector<SpecificAllocBase *> SpecificAllocBase::Instances;
-
-void freeArena() {
- for (SpecificAllocBase *Alloc : SpecificAllocBase::Instances)
- Alloc->reset();
- BAlloc.Reset();
-}
-}
OpenPOWER on IntegriCloud