aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
diff options
context:
space:
mode:
authorOCHyams <orlando.hyams@sony.com>2022-11-03 09:50:31 +0000
committerOCHyams <orlando.hyams@sony.com>2022-11-07 09:05:56 +0000
commita2620e00ffa232a406de3a1d8634beeda86956fd (patch)
tree270f697e7e305ef4f9f2a4dd242a1861b962a25f /llvm/lib/Bitcode/Reader/MetadataLoader.cpp
parentd9176563dc223589da43cccd47fe2584590c4b3b (diff)
downloadllvm-a2620e00ffa232a406de3a1d8634beeda86956fd.zip
llvm-a2620e00ffa232a406de3a1d8634beeda86956fd.tar.gz
llvm-a2620e00ffa232a406de3a1d8634beeda86956fd.tar.bz2
[Assignment Tracking][3/*] Add DIAssignID metadata boilerplate
The Assignment Tracking debug-info feature is outlined in this RFC: https://discourse.llvm.org/t/ rfc-assignment-tracking-a-better-way-of-specifying-variable-locations-in-ir Add the DIAssignID metadata attachment boilerplate. Includes a textual-bitcode roundtrip test and tests that the verifier and parser catch badly formed IR. This piece of metadata links together stores (used as an attachment) and the yet-to-be-added llvm.dbg.assign debug intrinsic (used as an operand). Reviewed By: jmorse Differential Revision: https://reviews.llvm.org/D132222
Diffstat (limited to 'llvm/lib/Bitcode/Reader/MetadataLoader.cpp')
-rw-r--r--llvm/lib/Bitcode/Reader/MetadataLoader.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
index 02d76f6..1ac1502 100644
--- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
+++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
@@ -856,6 +856,7 @@ MetadataLoader::MetadataLoaderImpl::lazyLoadModuleMetadataBlock() {
case bitc::METADATA_TEMPLATE_VALUE:
case bitc::METADATA_GLOBAL_VAR:
case bitc::METADATA_LOCAL_VAR:
+ case bitc::METADATA_ASSIGN_ID:
case bitc::METADATA_LABEL:
case bitc::METADATA_EXPRESSION:
case bitc::METADATA_OBJC_PROPERTY:
@@ -1964,6 +1965,18 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
break;
}
+ case bitc::METADATA_ASSIGN_ID: {
+ if (Record.size() != 1)
+ return error("Invalid DIAssignID record.");
+
+ IsDistinct = Record[0] & 1;
+ if (!IsDistinct)
+ return error("Invalid DIAssignID record. Must be distinct");
+
+ MetadataList.assignValue(DIAssignID::getDistinct(Context), NextMetadataNo);
+ NextMetadataNo++;
+ break;
+ }
case bitc::METADATA_LOCAL_VAR: {
// 10th field is for the obseleted 'inlinedAt:' field.
if (Record.size() < 8 || Record.size() > 10)