Always emit DW_AT_declaration attribute when the variable isn't a definition.

Summary:
This doesn't show up today as we don't emit decalration only variables. This
will be tested when the followup patches implementing import of forward
declared entities lands in clang.

Reviewers: echristo, dblaikie, aprantl

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D5382

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218041 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Frederic Riss 2014-09-18 09:38:23 +00:00
parent 344b66866d
commit 0a8f3afa4e

View File

@ -1670,6 +1670,9 @@ void DwarfCompileUnit::createGlobalVariableDIE(DIGlobalVariable GV) {
DD->addArangeLabel(SymbolCU(this, Sym));
addOpAddress(*Loc, Sym);
}
// A static member's declaration is already flagged as such.
if (!SDMDecl.Verify() && !GV.isDefinition())
addFlag(*VariableDIE, dwarf::DW_AT_declaration);
// Do not create specification DIE if context is either compile unit
// or a subprogram.
if (GVContext && GV.isDefinition() && !GVContext.isCompileUnit() &&
@ -1678,9 +1681,6 @@ void DwarfCompileUnit::createGlobalVariableDIE(DIGlobalVariable GV) {
VariableSpecDIE = &createAndAddDIE(dwarf::DW_TAG_variable, UnitDie);
addDIEEntry(*VariableSpecDIE, dwarf::DW_AT_specification, *VariableDIE);
addBlock(*VariableSpecDIE, dwarf::DW_AT_location, Loc);
// A static member's declaration is already flagged as such.
if (!SDMDecl.Verify())
addFlag(*VariableDIE, dwarf::DW_AT_declaration);
} else {
addBlock(*VariableDIE, dwarf::DW_AT_location, Loc);
}