mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
DebugInfo: Simplify solution to avoid DW_AT_artificial on inlined parameters.
Originally committed in r207717, I clearly didn't look very closely at the code to understand how existing things were working... llvm-svn: 209680
This commit is contained in:
parent
960a4f90a1
commit
f418e971c9
@ -448,12 +448,7 @@ static std::unique_ptr<DIE> constructVariableDIE(DwarfCompileUnit &TheCU,
|
||||
DbgVariable &DV,
|
||||
const LexicalScope &Scope,
|
||||
DIE *&ObjectPointer) {
|
||||
AbstractOrInlined AOI = AOI_None;
|
||||
if (Scope.isAbstractScope())
|
||||
AOI = AOI_Abstract;
|
||||
else if (Scope.getInlinedAt())
|
||||
AOI = AOI_Inlined;
|
||||
auto Var = TheCU.constructVariableDIE(DV, AOI);
|
||||
auto Var = TheCU.constructVariableDIE(DV, Scope.isAbstractScope());
|
||||
if (DV.isObjectPointer())
|
||||
ObjectPointer = Var.get();
|
||||
return Var;
|
||||
|
@ -1769,34 +1769,30 @@ void DwarfUnit::constructContainingTypeDIEs() {
|
||||
|
||||
/// constructVariableDIE - Construct a DIE for the given DbgVariable.
|
||||
std::unique_ptr<DIE> DwarfUnit::constructVariableDIE(DbgVariable &DV,
|
||||
AbstractOrInlined AbsIn) {
|
||||
auto D = constructVariableDIEImpl(DV, AbsIn);
|
||||
bool Abstract) {
|
||||
auto D = constructVariableDIEImpl(DV, Abstract);
|
||||
DV.setDIE(*D);
|
||||
return D;
|
||||
}
|
||||
|
||||
std::unique_ptr<DIE>
|
||||
DwarfUnit::constructVariableDIEImpl(const DbgVariable &DV,
|
||||
AbstractOrInlined AbsIn) {
|
||||
std::unique_ptr<DIE> DwarfUnit::constructVariableDIEImpl(const DbgVariable &DV,
|
||||
bool Abstract) {
|
||||
StringRef Name = DV.getName();
|
||||
|
||||
// Define variable debug information entry.
|
||||
auto VariableDie = make_unique<DIE>(DV.getTag());
|
||||
DbgVariable *AbsVar = DV.getAbstractVariable();
|
||||
DIE *AbsDIE = AbsVar ? AbsVar->getDIE() : nullptr;
|
||||
if (AbsDIE)
|
||||
addDIEEntry(*VariableDie, dwarf::DW_AT_abstract_origin, *AbsDIE);
|
||||
if (DbgVariable *AbsVar = DV.getAbstractVariable())
|
||||
addDIEEntry(*VariableDie, dwarf::DW_AT_abstract_origin, *AbsVar->getDIE());
|
||||
else {
|
||||
if (!Name.empty())
|
||||
addString(*VariableDie, dwarf::DW_AT_name, Name);
|
||||
addSourceLine(*VariableDie, DV.getVariable());
|
||||
addType(*VariableDie, DV.getType());
|
||||
if (DV.isArtificial())
|
||||
addFlag(*VariableDie, dwarf::DW_AT_artificial);
|
||||
}
|
||||
|
||||
if (AbsIn != AOI_Inlined && DV.isArtificial())
|
||||
addFlag(*VariableDie, dwarf::DW_AT_artificial);
|
||||
|
||||
if (AbsIn == AOI_Abstract)
|
||||
if (Abstract)
|
||||
return VariableDie;
|
||||
|
||||
// Add variable address.
|
||||
|
@ -61,8 +61,6 @@ public:
|
||||
void addRange(RangeSpan Range) { Ranges.push_back(Range); }
|
||||
};
|
||||
|
||||
enum AbstractOrInlined { AOI_None, AOI_Inlined, AOI_Abstract };
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
/// Unit - This dwarf writer support class manages information associated
|
||||
/// with a source file.
|
||||
@ -419,7 +417,7 @@ public:
|
||||
|
||||
/// constructVariableDIE - Construct a DIE for the given DbgVariable.
|
||||
std::unique_ptr<DIE> constructVariableDIE(DbgVariable &DV,
|
||||
AbstractOrInlined AbsIn = AOI_None);
|
||||
bool Abstract = false);
|
||||
|
||||
/// constructSubprogramArguments - Construct function argument DIEs.
|
||||
void constructSubprogramArguments(DIE &Buffer, DIArray Args);
|
||||
@ -457,7 +455,7 @@ private:
|
||||
/// \brief Construct a DIE for the given DbgVariable without initializing the
|
||||
/// DbgVariable's DIE reference.
|
||||
std::unique_ptr<DIE> constructVariableDIEImpl(const DbgVariable &DV,
|
||||
AbstractOrInlined AbsIn);
|
||||
bool Abstract);
|
||||
|
||||
/// constructTypeDIE - Construct basic type die from DIBasicType.
|
||||
void constructTypeDIE(DIE &Buffer, DIBasicType BTy);
|
||||
|
Loading…
Reference in New Issue
Block a user