Provide interface to identifiy artificial methods.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95240 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel
2010-02-03 19:57:19 +00:00
parent 3a813dc707
commit 4e0d19dfd9
3 changed files with 14 additions and 6 deletions

View File

@@ -375,6 +375,7 @@ namespace llvm {
DICompositeType getContainingType() const { DICompositeType getContainingType() const {
return getFieldAs<DICompositeType>(13); return getFieldAs<DICompositeType>(13);
} }
unsigned isArtificial() const { return getUnsignedField(14); }
StringRef getFilename() const { return getCompileUnit().getFilename();} StringRef getFilename() const { return getCompileUnit().getFilename();}
StringRef getDirectory() const { return getCompileUnit().getDirectory();} StringRef getDirectory() const { return getCompileUnit().getDirectory();}
@@ -595,7 +596,8 @@ namespace llvm {
bool isDefinition, bool isDefinition,
unsigned VK = 0, unsigned VK = 0,
unsigned VIndex = 0, unsigned VIndex = 0,
DIType = DIType()); DIType = DIType(),
bool isArtificial = 0);
/// CreateSubprogramDefinition - Create new subprogram descriptor for the /// CreateSubprogramDefinition - Create new subprogram descriptor for the
/// given declaration. /// given declaration.

View File

@@ -860,7 +860,8 @@ DISubprogram DIFactory::CreateSubprogram(DIDescriptor Context,
bool isLocalToUnit, bool isLocalToUnit,
bool isDefinition, bool isDefinition,
unsigned VK, unsigned VIndex, unsigned VK, unsigned VIndex,
DIType ContainingType) { DIType ContainingType,
bool isArtificial) {
Value *Elts[] = { Value *Elts[] = {
GetTagConstant(dwarf::DW_TAG_subprogram), GetTagConstant(dwarf::DW_TAG_subprogram),
@@ -876,9 +877,10 @@ DISubprogram DIFactory::CreateSubprogram(DIDescriptor Context,
ConstantInt::get(Type::getInt1Ty(VMContext), isDefinition), ConstantInt::get(Type::getInt1Ty(VMContext), isDefinition),
ConstantInt::get(Type::getInt32Ty(VMContext), (unsigned)VK), ConstantInt::get(Type::getInt32Ty(VMContext), (unsigned)VK),
ConstantInt::get(Type::getInt32Ty(VMContext), VIndex), ConstantInt::get(Type::getInt32Ty(VMContext), VIndex),
ContainingType.getNode() ContainingType.getNode(),
ConstantInt::get(Type::getInt1Ty(VMContext), isArtificial)
}; };
return DISubprogram(MDNode::get(VMContext, &Elts[0], 14)); return DISubprogram(MDNode::get(VMContext, &Elts[0], 15));
} }
/// CreateSubprogramDefinition - Create new subprogram descriptor for the /// CreateSubprogramDefinition - Create new subprogram descriptor for the
@@ -902,9 +904,10 @@ DISubprogram DIFactory::CreateSubprogramDefinition(DISubprogram &SPDeclaration)
ConstantInt::get(Type::getInt1Ty(VMContext), true), ConstantInt::get(Type::getInt1Ty(VMContext), true),
DeclNode->getOperand(11), // Virtuality DeclNode->getOperand(11), // Virtuality
DeclNode->getOperand(12), // VIndex DeclNode->getOperand(12), // VIndex
DeclNode->getOperand(13) // Containting Type DeclNode->getOperand(13), // Containting Type
DeclNode->getOperand(14) // isArtificial
}; };
return DISubprogram(MDNode::get(VMContext, &Elts[0], 14)); return DISubprogram(MDNode::get(VMContext, &Elts[0], 15));
} }
/// CreateGlobalVariable - Create a new descriptor for the specified global. /// CreateGlobalVariable - Create a new descriptor for the specified global.

View File

@@ -1201,6 +1201,9 @@ DIE *DwarfDebug::createSubprogramDIE(const DISubprogram &SP, bool MakeDecl) {
} }
} }
if (SP.isArtificial())
addUInt(SPDie, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
// DW_TAG_inlined_subroutine may refer to this DIE. // DW_TAG_inlined_subroutine may refer to this DIE.
ModuleCU->insertDIE(SP.getNode(), SPDie); ModuleCU->insertDIE(SP.getNode(), SPDie);
return SPDie; return SPDie;