diff options
author | Manman Ren <manman.ren@gmail.com> | 2014-07-28 18:52:30 +0000 |
---|---|---|
committer | Manman Ren <manman.ren@gmail.com> | 2014-07-28 18:52:30 +0000 |
commit | bf696e39309bd1d92c65ce2ab41beeb89879f85d (patch) | |
tree | ff65309b1b42da0762042708156ed12954194655 /llvm/lib/IR/DebugInfo.cpp | |
parent | b04846b4cde6879660d82a2f0fc8627b168acd55 (diff) | |
download | bcm5719-llvm-bf696e39309bd1d92c65ce2ab41beeb89879f85d.tar.gz bcm5719-llvm-bf696e39309bd1d92c65ce2ab41beeb89879f85d.zip |
[Debug Info] replace DIUnspecifiedParameter with DITrivialType.
This is the first of a series of patches to handle type uniqueing of the
type array for a subroutine type.
This commit makes sure unspecified_parameter is a DIType to enable converting
the type array for a subroutine type to an array of DITypes.
This commit should have no functionality change. With this commit, we may
change unspecified type to be a DITrivialType instead of a DIType.
llvm-svn: 214111
Diffstat (limited to 'llvm/lib/IR/DebugInfo.cpp')
-rw-r--r-- | llvm/lib/IR/DebugInfo.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/llvm/lib/IR/DebugInfo.cpp b/llvm/lib/IR/DebugInfo.cpp index 5e39b242dbb..8e05435cb33 100644 --- a/llvm/lib/IR/DebugInfo.cpp +++ b/llvm/lib/IR/DebugInfo.cpp @@ -39,6 +39,7 @@ bool DIDescriptor::Verify() const { return DbgNode && (DIDerivedType(DbgNode).Verify() || DICompositeType(DbgNode).Verify() || DIBasicType(DbgNode).Verify() || + DITrivialType(DbgNode).Verify() || DIVariable(DbgNode).Verify() || DISubprogram(DbgNode).Verify() || DIGlobalVariable(DbgNode).Verify() || DIFile(DbgNode).Verify() || DICompileUnit(DbgNode).Verify() || DINameSpace(DbgNode).Verify() || @@ -46,7 +47,6 @@ bool DIDescriptor::Verify() const { DILexicalBlockFile(DbgNode).Verify() || DISubrange(DbgNode).Verify() || DIEnumerator(DbgNode).Verify() || DIObjCProperty(DbgNode).Verify() || - DIUnspecifiedParameter(DbgNode).Verify() || DITemplateTypeParameter(DbgNode).Verify() || DITemplateValueParameter(DbgNode).Verify() || DIImportedEntity(DbgNode).Verify()); @@ -155,6 +155,10 @@ MDNode *DIVariable::getInlinedAt() const { return getNodeField(DbgNode, 7); } // Predicates //===----------------------------------------------------------------------===// +bool DIDescriptor::isTrivialType() const { + return DbgNode && getTag() == dwarf::DW_TAG_unspecified_parameters; +} + /// isBasicType - Return true if the specified tag is legal for /// DIBasicType. bool DIDescriptor::isBasicType() const { @@ -225,7 +229,8 @@ bool DIDescriptor::isVariable() const { /// isType - Return true if the specified tag is legal for DIType. bool DIDescriptor::isType() const { - return isBasicType() || isCompositeType() || isDerivedType(); + return isBasicType() || isCompositeType() || isDerivedType() || + isTrivialType(); } /// isSubprogram - Return true if the specified tag is legal for @@ -456,7 +461,7 @@ bool DIType::Verify() const { // FIXME: Sink this into the various subclass verifies. uint16_t Tag = getTag(); - if (!isBasicType() && Tag != dwarf::DW_TAG_const_type && + if (!isBasicType() && !isTrivialType() && Tag != dwarf::DW_TAG_const_type && Tag != dwarf::DW_TAG_volatile_type && Tag != dwarf::DW_TAG_pointer_type && Tag != dwarf::DW_TAG_ptr_to_member_type && Tag != dwarf::DW_TAG_reference_type && @@ -471,6 +476,8 @@ bool DIType::Verify() const { // a CompositeType. if (isBasicType()) return DIBasicType(DbgNode).Verify(); + else if (isTrivialType()) + return DITrivialType(DbgNode).Verify(); else if (isCompositeType()) return DICompositeType(DbgNode).Verify(); else if (isDerivedType()) @@ -484,6 +491,10 @@ bool DIBasicType::Verify() const { return isBasicType() && DbgNode->getNumOperands() == 10; } +bool DITrivialType::Verify() const { + return isTrivialType() && DbgNode->getNumOperands() == 1; +} + /// Verify - Verify that a derived type descriptor is well formed. bool DIDerivedType::Verify() const { // Make sure DerivedFrom @ field 9 is TypeRef. @@ -624,11 +635,6 @@ bool DILexicalBlockFile::Verify() const { return isLexicalBlockFile() && DbgNode->getNumOperands() == 3; } -/// \brief Verify that an unspecified parameter descriptor is well formed. -bool DIUnspecifiedParameter::Verify() const { - return isUnspecifiedParameter() && DbgNode->getNumOperands() == 1; -} - /// \brief Verify that the template type parameter descriptor is well formed. bool DITemplateTypeParameter::Verify() const { return isTemplateTypeParameter() && DbgNode->getNumOperands() == 7; @@ -1290,7 +1296,7 @@ void DIEnumerator::printInternal(raw_ostream &OS) const { } void DIType::printInternal(raw_ostream &OS) const { - if (!DbgNode) + if (!DbgNode || isTrivialType()) return; StringRef Res = getName(); |