summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Bitcode/Reader
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Bitcode/Reader')
-rw-r--r--llvm/lib/Bitcode/Reader/MetadataLoader.cpp23
1 files changed, 19 insertions, 4 deletions
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
index 8ec08c9a872..b47628dde28 100644
--- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
+++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
@@ -978,12 +978,16 @@ Error MetadataLoader::MetadataLoaderImpl::parseMetadata(bool ModuleLevel) {
DIGlobalVariable,
(Context, getMDOrNull(Record[1]), getMDString(Record[2]),
getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
- getDITypeRefOrNull(Record[6]), Record[7], Record[8], Expr,
+ getDITypeRefOrNull(Record[6]), Record[7], Record[8],
getMDOrNull(Record[10]), AlignInBits));
- MetadataList.assignValue(DGV, NextMetadataNo++);
- if (Attach)
- Attach->addDebugInfo(DGV);
+ if (Expr || Attach) {
+ auto *DGVE = DIGlobalVariableExpression::getDistinct(Context, DGV, Expr);
+ MetadataList.assignValue(DGVE, NextMetadataNo++);
+ if (Attach)
+ Attach->addDebugInfo(DGVE);
+ } else
+ MetadataList.assignValue(DGV, NextMetadataNo++);
break;
}
@@ -1033,6 +1037,17 @@ Error MetadataLoader::MetadataLoaderImpl::parseMetadata(bool ModuleLevel) {
NextMetadataNo++);
break;
}
+ case bitc::METADATA_GLOBAL_VAR_EXPR: {
+ if (Record.size() != 3)
+ return error("Invalid record");
+
+ IsDistinct = Record[0];
+ MetadataList.assignValue(GET_OR_DISTINCT(DIGlobalVariableExpression,
+ (Context, getMDOrNull(Record[1]),
+ getMDOrNull(Record[2]))),
+ NextMetadataNo++);
+ break;
+ }
case bitc::METADATA_OBJC_PROPERTY: {
if (Record.size() != 8)
return error("Invalid record");
OpenPOWER on IntegriCloud