diff options
author | Devang Patel <dpatel@apple.com> | 2011-09-14 23:13:28 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2011-09-14 23:13:28 +0000 |
commit | 734a67cda5a02be1654a2f89b811d7b6cbe3f5e5 (patch) | |
tree | 83b5bea9bdbcc35df956099082956a8fb33c3163 /lib/Analysis | |
parent | e1d58a6556fe8b00d119373aeefbbecc9b86a1c5 (diff) | |
download | external_llvm-734a67cda5a02be1654a2f89b811d7b6cbe3f5e5.zip external_llvm-734a67cda5a02be1654a2f89b811d7b6cbe3f5e5.tar.gz external_llvm-734a67cda5a02be1654a2f89b811d7b6cbe3f5e5.tar.bz2 |
Add support to emit debug info for C++0x nullptr type.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139751 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis')
-rw-r--r-- | lib/Analysis/DIBuilder.cpp | 20 | ||||
-rw-r--r-- | lib/Analysis/DebugInfo.cpp | 9 |
2 files changed, 28 insertions, 1 deletions
diff --git a/lib/Analysis/DIBuilder.cpp b/lib/Analysis/DIBuilder.cpp index cce8d96..fd56d36 100644 --- a/lib/Analysis/DIBuilder.cpp +++ b/lib/Analysis/DIBuilder.cpp @@ -146,6 +146,26 @@ DIEnumerator DIBuilder::createEnumerator(StringRef Name, uint64_t Val) { return DIEnumerator(MDNode::get(VMContext, Elts)); } +/// createNullPtrType - Create C++0x nullptr type. +DIType DIBuilder::createNullPtrType(StringRef Name) { + assert(!Name.empty() && "Unable to create type without name"); + // nullptr is encoded in DIBasicType format. Line number, filename, + // ,size, alignment, offset and flags are always empty here. + Value *Elts[] = { + GetTagConstant(VMContext, dwarf::DW_TAG_unspecified_type), + NULL, //TheCU, + MDString::get(VMContext, Name), + NULL, // Filename + ConstantInt::get(Type::getInt32Ty(VMContext), 0), // Line + ConstantInt::get(Type::getInt64Ty(VMContext), 0), // Size + ConstantInt::get(Type::getInt64Ty(VMContext), 0), // Align + ConstantInt::get(Type::getInt64Ty(VMContext), 0), // Offset + ConstantInt::get(Type::getInt32Ty(VMContext), 0), // Flags; + ConstantInt::get(Type::getInt32Ty(VMContext), 0), // Encoding + }; + return DIType(MDNode::get(VMContext, Elts)); +} + /// createBasicType - Create debugging information entry for a basic /// type, e.g 'char'. DIType DIBuilder::createBasicType(StringRef Name, uint64_t SizeInBits, diff --git a/lib/Analysis/DebugInfo.cpp b/lib/Analysis/DebugInfo.cpp index a3dea40..aeb039c 100644 --- a/lib/Analysis/DebugInfo.cpp +++ b/lib/Analysis/DebugInfo.cpp @@ -130,7 +130,14 @@ MDNode *DIVariable::getInlinedAt() const { /// isBasicType - Return true if the specified tag is legal for /// DIBasicType. bool DIDescriptor::isBasicType() const { - return DbgNode && getTag() == dwarf::DW_TAG_base_type; + if (!DbgNode) return false; + switch (getTag()) { + case dwarf::DW_TAG_base_type: + case dwarf::DW_TAG_unspecified_type: + return true; + default: + return false; + } } /// isDerivedType - Return true if the specified tag is legal for DIDerivedType. |