mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
[CodeView] Emit UdtSourceLine information for enums
Summary: - Emit UdtSourceLine information for enums to match MSVC - Add a method to add UDTSrcLine and call it for all Class/Struct/Union/Enum - Update test cases to verify the changes Reviewers: zturner, llvm-commits, rnk Reviewed By: rnk Differential Revision: https://reviews.llvm.org/D44116 llvm-svn: 326824
This commit is contained in:
parent
6f1f5adcfd
commit
5652dab80a
@ -1769,6 +1769,26 @@ static ClassOptions getCommonClassOptions(const DICompositeType *Ty) {
|
||||
return CO;
|
||||
}
|
||||
|
||||
void CodeViewDebug::addUDTSrcLine(const DIType *Ty, TypeIndex TI) {
|
||||
switch (Ty->getTag()) {
|
||||
case dwarf::DW_TAG_class_type:
|
||||
case dwarf::DW_TAG_structure_type:
|
||||
case dwarf::DW_TAG_union_type:
|
||||
case dwarf::DW_TAG_enumeration_type:
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
if (const auto *File = Ty->getFile()) {
|
||||
StringIdRecord SIDR(TypeIndex(0x0), getFullFilepath(File));
|
||||
TypeIndex SIDI = TypeTable.writeLeafType(SIDR);
|
||||
|
||||
UdtSourceLineRecord USLR(TI, SIDI, Ty->getLine());
|
||||
TypeTable.writeLeafType(USLR);
|
||||
}
|
||||
}
|
||||
|
||||
TypeIndex CodeViewDebug::lowerTypeEnum(const DICompositeType *Ty) {
|
||||
ClassOptions CO = getCommonClassOptions(Ty);
|
||||
TypeIndex FTI;
|
||||
@ -1797,7 +1817,11 @@ TypeIndex CodeViewDebug::lowerTypeEnum(const DICompositeType *Ty) {
|
||||
|
||||
EnumRecord ER(EnumeratorCount, CO, FTI, FullName, Ty->getIdentifier(),
|
||||
getTypeIndex(Ty->getBaseType()));
|
||||
return TypeTable.writeLeafType(ER);
|
||||
TypeIndex EnumTI = TypeTable.writeLeafType(ER);
|
||||
|
||||
addUDTSrcLine(Ty, EnumTI);
|
||||
|
||||
return EnumTI;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
@ -1949,13 +1973,7 @@ TypeIndex CodeViewDebug::lowerCompleteTypeClass(const DICompositeType *Ty) {
|
||||
SizeInBytes, FullName, Ty->getIdentifier());
|
||||
TypeIndex ClassTI = TypeTable.writeLeafType(CR);
|
||||
|
||||
if (const auto *File = Ty->getFile()) {
|
||||
StringIdRecord SIDR(TypeIndex(0x0), getFullFilepath(File));
|
||||
TypeIndex SIDI = TypeTable.writeLeafType(SIDR);
|
||||
|
||||
UdtSourceLineRecord USLR(ClassTI, SIDI, Ty->getLine());
|
||||
TypeTable.writeLeafType(USLR);
|
||||
}
|
||||
addUDTSrcLine(Ty, ClassTI);
|
||||
|
||||
addToUDTs(Ty);
|
||||
|
||||
@ -1991,11 +2009,7 @@ TypeIndex CodeViewDebug::lowerCompleteTypeUnion(const DICompositeType *Ty) {
|
||||
Ty->getIdentifier());
|
||||
TypeIndex UnionTI = TypeTable.writeLeafType(UR);
|
||||
|
||||
StringIdRecord SIR(TypeIndex(0x0), getFullFilepath(Ty->getFile()));
|
||||
TypeIndex SIRI = TypeTable.writeLeafType(SIR);
|
||||
|
||||
UdtSourceLineRecord USLR(UnionTI, SIRI, Ty->getLine());
|
||||
TypeTable.writeLeafType(USLR);
|
||||
addUDTSrcLine(Ty, UnionTI);
|
||||
|
||||
addToUDTs(Ty);
|
||||
|
||||
|
@ -279,6 +279,8 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {
|
||||
|
||||
void addToUDTs(const DIType *Ty);
|
||||
|
||||
void addUDTSrcLine(const DIType *Ty, codeview::TypeIndex TI);
|
||||
|
||||
codeview::TypeIndex lowerType(const DIType *Ty, const DIType *ClassTy);
|
||||
codeview::TypeIndex lowerTypeAlias(const DIDerivedType *Ty);
|
||||
codeview::TypeIndex lowerTypeArray(const DICompositeType *Ty);
|
||||
|
@ -23,6 +23,17 @@
|
||||
; CHECK-NEXT: FieldListType: <field list> (0x1000)
|
||||
; CHECK-NEXT: Name: E
|
||||
; CHECK-NEXT: }
|
||||
; CHECK-NEXT: StringId (0x1002) {
|
||||
; CHECK-NEXT: TypeLeafKind: LF_STRING_ID (0x1605)
|
||||
; CHECK-NEXT: Id: 0x0
|
||||
; CHECK-NEXT: StringData: \<stdin>
|
||||
; CHECK-NEXT: }
|
||||
; CHECK-NEXT: UdtSourceLine (0x1003) {
|
||||
; CHECK-NEXT: TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
|
||||
; CHECK-NEXT: UDT: E (0x1001)
|
||||
; CHECK-NEXT: SourceFile: \<stdin> (0x1002)
|
||||
; CHECK-NEXT: LineNumber: 1
|
||||
; CHECK_NEXT }
|
||||
|
||||
source_filename = "test/DebugInfo/COFF/enum.ll"
|
||||
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
|
||||
|
@ -134,7 +134,7 @@ target triple = "x86_64-pc-windows-msvc19.0.24215"
|
||||
; CHECK-NEXT: }
|
||||
; CHECK-NEXT: }
|
||||
;
|
||||
; CHECK: Struct (0x1007) {
|
||||
; CHECK: Struct (0x{{.*}}) {
|
||||
; CHECK-NEXT: TypeLeafKind: LF_STRUCTURE (0x1505)
|
||||
; CHECK-NEXT: MemberCount: 4
|
||||
; CHECK-NEXT: Properties [ (0x210)
|
||||
|
Loading…
Reference in New Issue
Block a user