mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
Actually support DW_TAG_rvalue_reference_type that we were trying
to generate out of the front end. rdar://11479676 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157094 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -229,12 +229,13 @@ DIType DIBuilder::createPointerType(DIType PointeeTy, uint64_t SizeInBits,
|
||||
return DIType(MDNode::get(VMContext, Elts));
|
||||
}
|
||||
|
||||
/// createReferenceType - Create debugging information entry for a reference.
|
||||
DIType DIBuilder::createReferenceType(DIType RTy) {
|
||||
/// createReferenceType - Create debugging information entry for a reference
|
||||
/// type.
|
||||
DIType DIBuilder::createReferenceType(unsigned Tag, DIType RTy) {
|
||||
assert(RTy.Verify() && "Unable to create reference type");
|
||||
// References are encoded in DIDerivedType format.
|
||||
Value *Elts[] = {
|
||||
GetTagConstant(VMContext, dwarf::DW_TAG_reference_type),
|
||||
GetTagConstant(VMContext, Tag),
|
||||
NULL, // TheCU,
|
||||
NULL, // Name
|
||||
NULL, // Filename
|
||||
|
@@ -150,6 +150,7 @@ bool DIDescriptor::isDerivedType() const {
|
||||
case dwarf::DW_TAG_typedef:
|
||||
case dwarf::DW_TAG_pointer_type:
|
||||
case dwarf::DW_TAG_reference_type:
|
||||
case dwarf::DW_TAG_rvalue_reference_type:
|
||||
case dwarf::DW_TAG_const_type:
|
||||
case dwarf::DW_TAG_volatile_type:
|
||||
case dwarf::DW_TAG_restrict_type:
|
||||
@@ -399,11 +400,13 @@ bool DIType::Verify() const {
|
||||
unsigned Tag = getTag();
|
||||
if (!isBasicType() && Tag != dwarf::DW_TAG_const_type &&
|
||||
Tag != dwarf::DW_TAG_volatile_type && Tag != dwarf::DW_TAG_pointer_type &&
|
||||
Tag != dwarf::DW_TAG_reference_type && Tag != dwarf::DW_TAG_restrict_type
|
||||
&& Tag != dwarf::DW_TAG_vector_type && Tag != dwarf::DW_TAG_array_type
|
||||
&& Tag != dwarf::DW_TAG_enumeration_type
|
||||
&& Tag != dwarf::DW_TAG_subroutine_type
|
||||
&& getFilename().empty())
|
||||
Tag != dwarf::DW_TAG_reference_type &&
|
||||
Tag != dwarf::DW_TAG_rvalue_reference_type &&
|
||||
Tag != dwarf::DW_TAG_restrict_type && Tag != dwarf::DW_TAG_vector_type &&
|
||||
Tag != dwarf::DW_TAG_array_type &&
|
||||
Tag != dwarf::DW_TAG_enumeration_type &&
|
||||
Tag != dwarf::DW_TAG_subroutine_type &&
|
||||
getFilename().empty())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
@@ -512,7 +515,8 @@ uint64_t DIDerivedType::getOriginalTypeSize() const {
|
||||
// it's a reference then it's just the size of the field. Pointer types
|
||||
// have no need of this since they're a different type of qualification
|
||||
// on the type.
|
||||
if (BaseType.getTag() == dwarf::DW_TAG_reference_type)
|
||||
if (BaseType.getTag() == dwarf::DW_TAG_reference_type ||
|
||||
BaseType.getTag() == dwarf::DW_TAG_rvalue_reference_type)
|
||||
return getSizeInBits();
|
||||
else if (BaseType.isDerivedType())
|
||||
return DIDerivedType(BaseType).getOriginalTypeSize();
|
||||
|
Reference in New Issue
Block a user