diff options
| author | Stephen Tozer <Stephen.Tozer@Sony.com> | 2023-11-17 17:52:24 +0000 |
|---|---|---|
| committer | Stephen Tozer <Stephen.Tozer@Sony.com> | 2023-11-17 17:55:41 +0000 |
| commit | f99a02005970cdcb0aad0de80fa4e5b546c6546b (patch) | |
| tree | 100118629abadf627aee772fd0deedfdce9191e8 /llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | |
| parent | e2fb816c4f0286ddf8b1030148a343d5efc14e01 (diff) | |
| download | llvm-f99a02005970cdcb0aad0de80fa4e5b546c6546b.zip llvm-f99a02005970cdcb0aad0de80fa4e5b546c6546b.tar.gz llvm-f99a02005970cdcb0aad0de80fa4e5b546c6546b.tar.bz2 | |
Reapply "[DebugInfo] Make DIArgList inherit from Metadata and always unique"
This reverts commit 0fd5dc94380d5fe666dc6c603b4bb782cef743e7.
The original commit removed DIArgLists from being in an MDNode map, but did
not insert a new `delete` in the LLVMContextImpl destructor. This
reapply adds that call to delete, preventing a memory leak.
Diffstat (limited to 'llvm/lib/Bitcode/Writer/BitcodeWriter.cpp')
| -rw-r--r-- | llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index d16b5c7..9c21cc6 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -336,8 +336,7 @@ private: unsigned Abbrev); void writeDIMacroFile(const DIMacroFile *N, SmallVectorImpl<uint64_t> &Record, unsigned Abbrev); - void writeDIArgList(const DIArgList *N, SmallVectorImpl<uint64_t> &Record, - unsigned Abbrev); + void writeDIArgList(const DIArgList *N, SmallVectorImpl<uint64_t> &Record); void writeDIModule(const DIModule *N, SmallVectorImpl<uint64_t> &Record, unsigned Abbrev); void writeDIAssignID(const DIAssignID *N, SmallVectorImpl<uint64_t> &Record, @@ -1975,13 +1974,12 @@ void ModuleBitcodeWriter::writeDIMacroFile(const DIMacroFile *N, } void ModuleBitcodeWriter::writeDIArgList(const DIArgList *N, - SmallVectorImpl<uint64_t> &Record, - unsigned Abbrev) { + SmallVectorImpl<uint64_t> &Record) { Record.reserve(N->getArgs().size()); for (ValueAsMetadata *MD : N->getArgs()) Record.push_back(VE.getMetadataID(MD)); - Stream.EmitRecord(bitc::METADATA_ARG_LIST, Record, Abbrev); + Stream.EmitRecord(bitc::METADATA_ARG_LIST, Record); Record.clear(); } @@ -2264,6 +2262,10 @@ void ModuleBitcodeWriter::writeMetadataRecords( #include "llvm/IR/Metadata.def" } } + if (auto *AL = dyn_cast<DIArgList>(MD)) { + writeDIArgList(AL, Record); + continue; + } writeValueAsMetadata(cast<ValueAsMetadata>(MD), Record); } } |
