Fix a bug when emitting debug info for partially constant global variables.

While fixing a malformed testcase, I discovered that the code
exercised by it was wrong, too.

llvm-svn: 298664
This commit is contained in:
Adrian Prantl 2017-03-23 23:35:00 +00:00
parent 11873949e0
commit f0ffc5233d
2 changed files with 3 additions and 8 deletions

View File

@ -142,12 +142,6 @@ DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(
bool addToAccelTable = false;
DIELoc *Loc = nullptr;
std::unique_ptr<DIEDwarfExpression> DwarfExpr;
bool AllConstant = std::all_of(
GlobalExprs.begin(), GlobalExprs.end(),
[&](const GlobalExpr GE) {
return GE.Expr && GE.Expr->isConstant();
});
for (const auto &GE : GlobalExprs) {
const GlobalVariable *Global = GE.Var;
const DIExpression *Expr = GE.Expr;
@ -158,7 +152,8 @@ DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(
addConstantValue(*VariableDIE, /*Unsigned=*/true, Expr->getElement(1));
// We cannot describe the location of dllimport'd variables: the
// computation of their address requires loads from the IAT.
} else if ((Global && !Global->hasDLLImportStorageClass()) || AllConstant) {
} else if ((Global && !Global->hasDLLImportStorageClass()) ||
(Expr && Expr->isConstant())) {
if (!Loc) {
Loc = new (DIEValueAllocator) DIELoc;
DwarfExpr = llvm::make_unique<DIEDwarfExpression>(*Asm, *this, *Loc);

View File

@ -30,7 +30,7 @@ target triple = "x86_64-apple-macosx10.12.0"
@point.y = global i32 2, align 4, !dbg !13
@point.x = global i32 1, align 4, !dbg !12
@part_const.x = global i32 1, align 4, !dbg !15
@part_const.x = global i32 1, align 4, !dbg !14
!llvm.dbg.cu = !{!1}
!llvm.module.flags = !{!10, !11}