aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorManman Ren <manman.ren@gmail.com>2013-10-01 23:45:54 +0000
committerManman Ren <manman.ren@gmail.com>2013-10-01 23:45:54 +0000
commit2b53089bd017139f0125b870ace94ff27dffd2ff (patch)
tree41f0243fd8d9f2480e93554180518c19e00d7bb5 /include
parent76502a756da8fbc3cf6f2f26bc09cce598a9fc03 (diff)
downloadexternal_llvm-2b53089bd017139f0125b870ace94ff27dffd2ff.zip
external_llvm-2b53089bd017139f0125b870ace94ff27dffd2ff.tar.gz
external_llvm-2b53089bd017139f0125b870ace94ff27dffd2ff.tar.bz2
Debug Info: In DIBuilder, the derived-from field of a DW_TAG_pointer_type
is updated to use DITypeRef. Move isUnsignedDIType and getOriginalTypeSize from DebugInfo.h to be static helper functions in DwarfCompileUnit. We already have a static helper function "isTypeSigned" in DwarfCompileUnit, and a pointer to DwarfDebug is added to resolve the derived-from field. All three functions need to go across link for derived-from fields, so we need to get hold of a type identifier map. A pointer to DwarfDebug is also added to DbgVariable in order to resolve the derived-from field. Debug info verifier is updated to check a derived-from field is a TypeRef. Verifier will not go across link for derived-from fields, in debug info finder, we go across the link to add derived-from fields to types. Function getDICompositeType is only used by dragonegg and since dragonegg does not generate identifier for types, we use an empty map to resolve the derived-from field. When printing a derived-from field, we use DITypeRef::getName to either return the type identifier or getName of the DIType. A paired commit at clang is required due to changes to DIBuilder. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191800 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/DebugInfo.h22
1 files changed, 14 insertions, 8 deletions
diff --git a/include/llvm/DebugInfo.h b/include/llvm/DebugInfo.h
index ecdca49..cd4777d 100644
--- a/include/llvm/DebugInfo.h
+++ b/include/llvm/DebugInfo.h
@@ -22,6 +22,7 @@
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
+#include "llvm/IR/Metadata.h"
#include "llvm/Support/Dwarf.h"
namespace llvm {
@@ -206,6 +207,8 @@ namespace llvm {
/// Gets the parent scope for this scope node or returns a
/// default constructed scope.
DIScopeRef getContext() const;
+ /// If the scope node has a name, return that, else return an empty string.
+ StringRef getName() const;
StringRef getFilename() const;
StringRef getDirectory() const;
@@ -243,6 +246,16 @@ namespace llvm {
"MDNode in DITypeIdentifierMap should be a DIType.");
return T(Iter->second);
}
+ StringRef getName() const {
+ if (!Val)
+ return StringRef();
+
+ if (const MDNode *MD = dyn_cast<MDNode>(Val))
+ return T(MD).getName();
+
+ const MDString *MS = cast<MDString>(Val);
+ return MS->getString();
+ }
operator Value *() const { return const_cast<Value*>(Val); }
};
@@ -321,9 +334,6 @@ namespace llvm {
return DbgNode && isType();
}
- /// isUnsignedDIType - Return true if type encoding is unsigned.
- bool isUnsignedDIType();
-
/// replaceAllUsesWith - Replace all uses of debug info referenced by
/// this descriptor.
void replaceAllUsesWith(DIDescriptor &D);
@@ -351,11 +361,7 @@ namespace llvm {
public:
explicit DIDerivedType(const MDNode *N = 0) : DIType(N) {}
- DIType getTypeDerivedFrom() const { return getFieldAs<DIType>(9); }
-
- /// getOriginalTypeSize - If this type is derived from a base type then
- /// return base type size.
- uint64_t getOriginalTypeSize() const;
+ DITypeRef getTypeDerivedFrom() const { return getFieldAs<DITypeRef>(9); }
/// getObjCProperty - Return property node, if this ivar is
/// associated with one.