Fix bitcode upgrade for DIGlobalVariables with a var: field.
This is a follow-up to https://reviews.llvm.org/D29349. It turns out that NeedUpgradeToDIGlobalVariableExpression is always necessary when we encountered a version==0 record because it may always be referenced via a list of globals in a DICompileUnit. My tests weren't good enough to catch this though. To trigger this case, we need much older bitcode produced by LLVM around version 3.7. <rdar://problem/30404262> Differential Revision: https://reviews.llvm.org/D29693 llvm-svn: 294488
This commit is contained in:
@@ -1437,6 +1437,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
|
||||
} else if (Version == 0) {
|
||||
// Upgrade old metadata, which stored a global variable reference or a
|
||||
// ConstantInt here.
|
||||
NeedUpgradeToDIGlobalVariableExpression = true;
|
||||
Metadata *Expr = getMDOrNull(Record[9]);
|
||||
uint32_t AlignInBits = 0;
|
||||
if (Record.size() > 11) {
|
||||
@@ -1467,8 +1468,6 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
|
||||
DIGlobalVariableExpression *DGVE = nullptr;
|
||||
if (Attach || Expr)
|
||||
DGVE = DIGlobalVariableExpression::getDistinct(Context, DGV, Expr);
|
||||
else
|
||||
NeedUpgradeToDIGlobalVariableExpression = true;
|
||||
if (Attach)
|
||||
Attach->addDebugInfo(DGVE);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user