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-03 11:24:18 +0000
commite53c4c6d8617145c4dd8d428bf47544ba4110eb5 (patch)
treeed85013b0b05ed46d112b56c65807d3a5ec01d68 /llvm/lib/Bitcode/Reader/MetadataLoader.cpp
parent5144133f6fd50d6067c808b83af90437995e441d (diff)
downloadllvm-e53c4c6d8617145c4dd8d428bf47544ba4110eb5.zip
llvm-e53c4c6d8617145c4dd8d428bf47544ba4110eb5.tar.gz
llvm-e53c4c6d8617145c4dd8d428bf47544ba4110eb5.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)