From e5d844b5874488599dc79e788a2dd6efa02940fb Mon Sep 17 00:00:00 2001 From: Stephen Tozer Date: Wed, 21 Apr 2021 16:56:38 +0100 Subject: [Bitcode] Ensure DIArgList in bitcode has no null or forward metadata refs This patch fixes an issue in which ConstantAsMetadata arguments to a DIArglist, as well as the Constant values referenced by that metadata, would not be always be emitted correctly into bitcode. This patch fixes this issue firstly by searching for ConstantAsMetadata in DIArgLists (previously we would only search for them when directly wrapped in MetadataAsValue), and secondly by enumerating all of a DIArgList's arguments directly prior to enumerating the DIArgList itself. This patch also adds a number of asserts, and no longer treats the arguments to a DIArgList as optional fields when reading/writing to bitcode. Differential Revision: https://reviews.llvm.org/D100572 --- llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'llvm/lib/Bitcode/Writer/BitcodeWriter.cpp') diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index e36ce87554f2..3a7edd4479b3 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -1876,7 +1876,7 @@ void ModuleBitcodeWriter::writeDIArgList(const DIArgList *N, unsigned Abbrev) { Record.reserve(N->getArgs().size()); for (ValueAsMetadata *MD : N->getArgs()) - Record.push_back(VE.getMetadataOrNullID(MD)); + Record.push_back(VE.getMetadataID(MD)); Stream.EmitRecord(bitc::METADATA_ARG_LIST, Record, Abbrev); Record.clear(); -- cgit v1.2.3