mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
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
This commit is contained in:
parent
e1d58a6556
commit
734a67cda5
@ -97,6 +97,9 @@ namespace llvm {
|
||||
/// createEnumerator - Create a single enumerator value.
|
||||
DIEnumerator createEnumerator(StringRef Name, uint64_t Val);
|
||||
|
||||
/// createNullPtrType - Create C++0x nullptr type.
|
||||
DIType createNullPtrType(StringRef Name);
|
||||
|
||||
/// createBasicType - Create debugging information entry for a basic
|
||||
/// type.
|
||||
/// @param Name Type name.
|
||||
|
@ -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,
|
||||
|
@ -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.
|
||||
|
@ -658,13 +658,20 @@ void CompileUnit::addPubTypes(DISubprogram SP) {
|
||||
void CompileUnit::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
|
||||
// Get core information.
|
||||
StringRef Name = BTy.getName();
|
||||
Buffer.setTag(dwarf::DW_TAG_base_type);
|
||||
addUInt(&Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
|
||||
BTy.getEncoding());
|
||||
|
||||
// Add name if not anonymous or intermediate type.
|
||||
if (!Name.empty())
|
||||
addString(&Buffer, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
|
||||
|
||||
if (BTy.getTag() == dwarf::DW_TAG_unspecified_type) {
|
||||
Buffer.setTag(dwarf::DW_TAG_unspecified_type);
|
||||
// Unspecified types has only name, nothing else.
|
||||
return;
|
||||
}
|
||||
|
||||
Buffer.setTag(dwarf::DW_TAG_base_type);
|
||||
addUInt(&Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
|
||||
BTy.getEncoding());
|
||||
|
||||
uint64_t Size = BTy.getSizeInBits() >> 3;
|
||||
addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user