]> granicus.if.org Git - llvm/commitdiff
[codeview] Use a type index of zero for static method "this" types
authorReid Kleckner <rnk@google.com>
Fri, 15 Sep 2017 00:59:07 +0000 (00:59 +0000)
committerReid Kleckner <rnk@google.com>
Fri, 15 Sep 2017 00:59:07 +0000 (00:59 +0000)
Otherwise VS won't show anything in the autos or watch window of static
methods.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313329 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
test/DebugInfo/COFF/static-methods.ll

index 7e778c542c01988b14627f04875f8a010a88eb06..87aeb1f03dda731112677262de7d60b9e13295b4 100644 (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();
index e5e26fe05cac0a4cbf08dd2f7070bd55c19cbeac..77ff031b22134dcade9df73ae1f952366162e37f 100644 (file)
 ; 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: }