1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00

[codeview] Use a type index of zero for static method "this" types

Otherwise VS won't show anything in the autos or watch window of static
methods.

llvm-svn: 313329
This commit is contained in:
Reid Kleckner 2017-09-15 00:59:07 +00:00
parent d1ff5541e1
commit 4ae1df5b81
2 changed files with 40 additions and 4 deletions

View File

@ -1561,7 +1561,7 @@ TypeIndex CodeViewDebug::lowerTypeMemberFunction(const DISubroutineType *Ty,
ReturnTypeIndex = ReturnAndArgTypesRef.front();
ArgTypeIndices = ReturnAndArgTypesRef.drop_front();
}
TypeIndex ThisTypeIndex = TypeIndex::Void();
TypeIndex ThisTypeIndex;
if (!IsStaticMethod && !ArgTypeIndices.empty()) {
ThisTypeIndex = ArgTypeIndices.front();
ArgTypeIndices = ArgTypeIndices.drop_front();

View File

@ -12,24 +12,60 @@
; A *p = new A;
; $ clang t.cpp -S -emit-llvm -g -gcodeview -o t.ll
; CHECK: MemberFunction ([[STATIC_VOID:0x.*]]) {
; CHECK-NEXT: TypeLeafKind: LF_MFUNCTION (0x1009)
; CHECK-NEXT: ReturnType: void (0x3)
; CHECK-NEXT: ClassType: A ({{.*}})
; CHECK-NEXT: ThisType: 0x0
; CHECK-NEXT: CallingConvention: NearC (0x0)
; CHECK-NEXT: FunctionOptions [ (0x0)
; CHECK-NEXT: ]
; CHECK-NEXT: NumParameters: 0
; CHECK-NEXT: ArgListType: () ({{.*}})
; CHECK-NEXT: ThisAdjustment: 0
; CHECK-NEXT: }
; CHECK: MemberFunction ([[INSTANCE_VOID:0x.*]]) {
; CHECK-NEXT: TypeLeafKind: LF_MFUNCTION (0x1009)
; CHECK-NEXT: ReturnType: void (0x3)
; CHECK-NEXT: ClassType: A ({{.*}})
; CHECK-NEXT: ThisType: A* ({{.*}})
; CHECK-NEXT: CallingConvention: ThisCall (0xB)
; CHECK-NEXT: FunctionOptions [ (0x0)
; CHECK-NEXT: ]
; CHECK-NEXT: NumParameters: 0
; CHECK-NEXT: ArgListType: () ({{.*}})
; CHECK-NEXT: ThisAdjustment: 0
; CHECK-NEXT: }
; CHECK: MemberFunction ([[STATIC_TWO:0x.*]]) {
; CHECK-NEXT: TypeLeafKind: LF_MFUNCTION (0x1009)
; CHECK-NEXT: ReturnType: void (0x3)
; CHECK-NEXT: ClassType: A ({{.*}})
; CHECK-NEXT: ThisType: 0x0
; CHECK-NEXT: CallingConvention: NearC (0x0)
; CHECK-NEXT: FunctionOptions [ (0x0)
; CHECK-NEXT: ]
; CHECK-NEXT: NumParameters: 2
; CHECK-NEXT: ArgListType: (int, int) ({{.*}}
; CHECK-NEXT: ThisAdjustment: 0
; CHECK-NEXT: }
; CHECK: OneMethod {
; CHECK-NEXT: TypeLeafKind: LF_ONEMETHOD (0x1511)
; CHECK-NEXT: AccessSpecifier: Public (0x3)
; CHECK-NEXT: MethodKind: Static (0x2)
; CHECK-NEXT: Type: void A::() ({{.*}})
; CHECK-NEXT: Type: void A::() ([[STATIC_VOID]])
; CHECK-NEXT: Name: f
; CHECK-NEXT: }
; CHECK-NEXT: OneMethod {
; CHECK-NEXT: TypeLeafKind: LF_ONEMETHOD (0x1511)
; CHECK-NEXT: AccessSpecifier: Public (0x3)
; CHECK-NEXT: Type: void A::() ({{.*}})
; CHECK-NEXT: Type: void A::() ([[INSTANCE_VOID]])
; CHECK-NEXT: Name: g
; CHECK-NEXT: }
; CHECK-NEXT: OneMethod {
; CHECK-NEXT: TypeLeafKind: LF_ONEMETHOD (0x1511)
; CHECK-NEXT: AccessSpecifier: Public (0x3)
; CHECK-NEXT: MethodKind: Static (0x2)
; CHECK-NEXT: Type: void A::(int, int) ({{.*}})
; CHECK-NEXT: Type: void A::(int, int) ([[STATIC_TWO]])
; CHECK-NEXT: Name: h
; CHECK-NEXT: }