r287134 - Fix PR31029 by attaching an artificial debug location to msabi thunks.

Adrian Prantl via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 16 10:49:48 PST 2016


Author: adrian
Date: Wed Nov 16 12:49:47 2016
New Revision: 287134

URL: http://llvm.org/viewvc/llvm-project?rev=287134&view=rev
Log:
Fix PR31029 by attaching an artificial debug location to msabi thunks.
This was a latent bug that was recently uncovered by r286400.

Added:
    cfe/trunk/test/CodeGenCXX/debug-info-thunk-msabi.cpp
Modified:
    cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp

Modified: cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp?rev=287134&r1=287133&r2=287134&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp (original)
+++ cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp Wed Nov 16 12:49:47 2016
@@ -3840,8 +3840,11 @@ MicrosoftCXXABI::getAddrOfCXXCtorClosure
     FunctionArgs.push_back(&IsMostDerived);
 
   // Start defining the function.
+  auto NL = ApplyDebugLocation::CreateEmpty(CGF);
   CGF.StartFunction(GlobalDecl(), FnInfo.getReturnType(), ThunkFn, FnInfo,
                     FunctionArgs, CD->getLocation(), SourceLocation());
+  // Create a scope with an artificial location for the body of this function.
+  auto AL = ApplyDebugLocation::CreateArtificial(CGF);
   EmitThisParam(CGF);
   llvm::Value *This = getThisValue(CGF);
 

Added: cfe/trunk/test/CodeGenCXX/debug-info-thunk-msabi.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-thunk-msabi.cpp?rev=287134&view=auto
==============================================================================
--- cfe/trunk/test/CodeGenCXX/debug-info-thunk-msabi.cpp (added)
+++ cfe/trunk/test/CodeGenCXX/debug-info-thunk-msabi.cpp Wed Nov 16 12:49:47 2016
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 %s -triple i386-pc-windows-msvc19.0.0 -emit-obj \
+// RUN:     -debug-info-kind=line-tables-only -fms-extensions
+class __declspec(dllexport) A {
+  A(int * = new int) {}
+};
+// CHECK: define {{.*}}void @"\01??_FA@@AAEXXZ"
+// CHECK-SAME: !dbg ![[SP:[0-9]+]]
+// CHECK-NOT: {{ret }}
+// CHECK: call x86_thiscallcc %class.A* @"\01??0A@@AAE at PAH@Z"(%class.A* %this1, i32* %0)
+// CHECK-SAME: !dbg ![[DBG:[0-9]+]]
+// CHECK: ret void, !dbg ![[DBG]]
+//
+// CHECK: ![[SP]] = distinct !DISubprogram(
+// CHECK-SAME:          line: 3
+// CHECK-SAME:          isDefinition: true
+// CHECK-SAME:          DIFlagArtificial
+// CHECK-SAME:          ){{$}}
+//
+// CHECK: ![[DBG]] = !DILocation(line: 0




More information about the cfe-commits mailing list