r371080 - [DebugInfo] Add debug location to stubs generated by CGDeclCXX and mark them as artificial

Erik Pilkington via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 5 12:49:22 PDT 2019


Hi Alexandre,

Looks like this commit is causing crashes on darwin, can you take a look
please? Here is a failing bot:
http://lab.llvm.org:8080/green/job/clang-stage1-RA/1671/

Thanks!
Erik

On Thu, Sep 5, 2019 at 11:23 AM Alexandre Ganea via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Author: aganea
> Date: Thu Sep  5 08:24:49 2019
> New Revision: 371080
>
> URL: http://llvm.org/viewvc/llvm-project?rev=371080&view=rev
> Log:
> [DebugInfo] Add debug location to stubs generated by CGDeclCXX and mark
> them as artificial
>
> Differential Revision: https://reviews.llvm.org/D66328
>
> Added:
>     cfe/trunk/test/CodeGenCXX/debug-info-atexit-stub.cpp
>     cfe/trunk/test/CodeGenCXX/debug-info-destroy-helper.cpp
> Modified:
>     cfe/trunk/include/clang/AST/GlobalDecl.h
>     cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>     cfe/trunk/lib/CodeGen/CGDeclCXX.cpp
>     cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp
>     cfe/trunk/test/CodeGenCXX/debug-info-line.cpp
>
> Modified: cfe/trunk/include/clang/AST/GlobalDecl.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/GlobalDecl.h?rev=371080&r1=371079&r2=371080&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/AST/GlobalDecl.h (original)
> +++ cfe/trunk/include/clang/AST/GlobalDecl.h Thu Sep  5 08:24:49 2019
> @@ -31,6 +31,7 @@ enum class DynamicInitKind : unsigned {
>    NoStub = 0,
>    Initializer,
>    AtExit,
> +  GlobalArrayDestructor
>  };
>
>  /// GlobalDecl - represents a global declaration. This can either be a
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=371080&r1=371079&r2=371080&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Thu Sep  5 08:24:49 2019
> @@ -1910,7 +1910,8 @@ StringRef CGDebugInfo::getDynamicInitial
>                                                   llvm::Function *InitFn) {
>    // If we're not emitting codeview, use the mangled name. For Itanium,
> this is
>    // arbitrary.
> -  if (!CGM.getCodeGenOpts().EmitCodeView)
> +  if (!CGM.getCodeGenOpts().EmitCodeView ||
> +      StubKind == DynamicInitKind::GlobalArrayDestructor)
>      return InitFn->getName();
>
>    // Print the normal qualified name for the variable, then break off the
> last
> @@ -1935,6 +1936,7 @@ StringRef CGDebugInfo::getDynamicInitial
>
>    switch (StubKind) {
>    case DynamicInitKind::NoStub:
> +  case DynamicInitKind::GlobalArrayDestructor:
>      llvm_unreachable("not an initializer");
>    case DynamicInitKind::Initializer:
>      OS << "`dynamic initializer for '";
> @@ -3569,7 +3571,8 @@ void CGDebugInfo::EmitFunctionStart(Glob
>    if (Name.startswith("\01"))
>      Name = Name.substr(1);
>
> -  if (!HasDecl || D->isImplicit() || D->hasAttr<ArtificialAttr>()) {
> +  if (!HasDecl || D->isImplicit() || D->hasAttr<ArtificialAttr>() ||
> +      (isa<VarDecl>(D) && GD.getDynamicInitKind() !=
> DynamicInitKind::NoStub)) {
>      Flags |= llvm::DINode::FlagArtificial;
>      // Artificial functions should not silently reuse CurLoc.
>      CurLoc = SourceLocation();
>
> Modified: cfe/trunk/lib/CodeGen/CGDeclCXX.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDeclCXX.cpp?rev=371080&r1=371079&r2=371080&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDeclCXX.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDeclCXX.cpp Thu Sep  5 08:24:49 2019
> @@ -247,6 +247,8 @@ llvm::Function *CodeGenFunction::createA
>
>    CGF.StartFunction(GlobalDecl(&VD, DynamicInitKind::AtExit),
>                      CGM.getContext().VoidTy, fn, FI, FunctionArgList());
> +  // Emit an artificial location for this function.
> +  auto AL = ApplyDebugLocation::CreateArtificial(CGF);
>
>    llvm::CallInst *call = CGF.Builder.CreateCall(dtor, addr);
>
> @@ -642,8 +644,9 @@ void CodeGenFunction::GenerateCXXGlobalV
>
>    StartFunction(GlobalDecl(D, DynamicInitKind::Initializer),
>                  getContext().VoidTy, Fn,
> getTypes().arrangeNullaryFunction(),
> -                FunctionArgList(), D->getLocation(),
> -                D->getInit()->getExprLoc());
> +                FunctionArgList());
> +  // Emit an artificial location for this function.
> +  auto AL = ApplyDebugLocation::CreateArtificial(*this);
>
>    // Use guarded initialization if the global variable is weak. This
>    // occurs for, e.g., instantiated static data members and
> @@ -768,7 +771,10 @@ llvm::Function *CodeGenFunction::generat
>
>    CurEHLocation = VD->getBeginLoc();
>
> -  StartFunction(VD, getContext().VoidTy, fn, FI, args);
> +  StartFunction(GlobalDecl(VD, DynamicInitKind::GlobalArrayDestructor),
> +                getContext().VoidTy, fn, FI, args);
> +  // Emit an artificial location for this function.
> +  auto AL = ApplyDebugLocation::CreateArtificial(*this);
>
>    emitDestroy(addr, type, destroyer, useEHCleanupForArray);
>
>
> Added: cfe/trunk/test/CodeGenCXX/debug-info-atexit-stub.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-atexit-stub.cpp?rev=371080&view=auto
>
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/debug-info-atexit-stub.cpp (added)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-atexit-stub.cpp Thu Sep  5
> 08:24:49 2019
> @@ -0,0 +1,20 @@
> +// RUN: %clang_cc1 -emit-llvm %s -triple x86_64-windows-msvc -gcodeview
> -debug-info-kind=limited -o - | FileCheck %s
> +
> +struct a {
> +  ~a();
> +};
> +template <typename b> struct c : a {
> +  c(void (b::*)());
> +};
> +struct B {
> +  virtual void e();
> +};
> +c<B> *d() { static c<B> f(&B::e); return &f; }
> +
> +// CHECK: define internal void @"??__Ff@?1??d@@YAPEAU?$c at UB@@@@XZ at YAXXZ
> "()
> +// CHECK-SAME: !dbg ![[SUBPROGRAM:[0-9]+]] {
> +// CHECK: call void @"??1?$c at UB@@@@QEAA at XZ"(%struct.c* @"?f@?1??d@
> @YAPEAU?$c at UB@@@@XZ at 4U2@A"), !dbg ![[LOCATION:[0-9]+]]
> +// CHECK-NEXT: ret void, !dbg ![[LOCATION]]
> +// CHECK: ![[SUBPROGRAM]] = distinct !DISubprogram(name: "`dynamic atexit
> destructor for 'f'"
> +// CHECK-SAME: flags: DIFlagArtificial
> +// CHECK: ![[LOCATION]] = !DILocation(line: 0, scope: ![[SUBPROGRAM]])
> \ No newline at end of file
>
> Added: cfe/trunk/test/CodeGenCXX/debug-info-destroy-helper.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-destroy-helper.cpp?rev=371080&view=auto
>
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/debug-info-destroy-helper.cpp (added)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-destroy-helper.cpp Thu Sep  5
> 08:24:49 2019
> @@ -0,0 +1,24 @@
> +// RUN: %clang_cc1 -emit-llvm %s -triple x86_64-windows-msvc -gcodeview
> -debug-info-kind=limited -o - | FileCheck %s
> +
> +struct b {
> +  b(char *);
> +  ~b();
> +};
> +struct a {
> +  ~a();
> +};
> +struct {
> +  b c;
> +  const a &d;
> +} e[]{nullptr, {}};
> +
> +// CHECK: define internal void @__cxx_global_array_dtor(i8* %0)
> +// CHECK-SAME: !dbg ![[SUBPROGRAM:[0-9]+]] {
> +// CHECK: arraydestroy.body
> +// CHECK: %arraydestroy.elementPast =
> +// CHECK-SAME: !dbg ![[LOCATION:[0-9]+]]
> +// CHECK: call void @"??1<unnamed-type-e>@@QEAA at XZ"(%struct.anon*
> %arraydestroy.element)
> +// CHECK-SAME: !dbg ![[LOCATION]]
> +// CHECK: ![[SUBPROGRAM]] = distinct !DISubprogram(name:
> "__cxx_global_array_dtor"
> +// CHECK-SAME: flags: DIFlagArtificial
> +// CHECK: ![[LOCATION]] = !DILocation(line: 0,
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp?rev=371080&r1=371079&r2=371080&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp Thu Sep  5
> 08:24:49 2019
> @@ -29,25 +29,26 @@ template <typename U>
>  A FooTpl<T>::sdm_tpl(sizeof(U) + sizeof(T));
>  template A FooTpl<int>::sdm_tpl<int>;
>
> -// CHECK-NOKEXT: !DISubprogram(name: "__cxx_global_var_init",{{.*}} line:
> 15,{{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
> -// CHECK-NOKEXT: !DISubprogram(name: "__dtor_glob",{{.*}} line: 15,{{.*}}
> DISPFlagLocalToUnit | DISPFlagDefinition
> -// CHECK-NOKEXT: !DISubprogram(name: "__cxx_global_var_init.1",{{.*}}
> line: 16,{{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
> -// CHECK-NOKEXT: !DISubprogram(name: "__cxx_global_array_dtor",{{.*}}
> line: 16,{{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
> -// CHECK-NOKEXT: !DISubprogram(name: "__dtor_array",{{.*}} line:
> 16,{{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
> -// CHECK-NOKEXT: !DISubprogram(name: "__dtor__ZZ3foovE4stat",{{.*}} line:
> 19,{{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
> +// CHECK-NOKEXT: !DISubprogram(name: "__cxx_global_var_init",{{.*}}
> flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
> +// CHECK-NOKEXT: !DISubprogram(name: "__dtor_glob",{{.*}} flags:
> DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
> +// CHECK-NOKEXT: !DISubprogram(name: "__cxx_global_var_init.1",{{.*}}
> flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
> +// CHECK-NOKEXT: !DISubprogram(name: "__cxx_global_array_dtor",{{.*}}
> flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
> +// CHECK-NOKEXT: !DISubprogram(name: "__dtor_array",{{.*}} flags:
> DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
> +// CHECK-NOKEXT: !DISubprogram(name: "__dtor__ZZ3foovE4stat",{{.*}}
> flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
>  // CHECK-NOKEXT: !DISubprogram({{.*}} DISPFlagLocalToUnit |
> DISPFlagDefinition
>
>  // CHECK-KEXT: !DISubprogram({{.*}} DISPFlagLocalToUnit |
> DISPFlagDefinition
>
> -// CHECK-MSVC: !DISubprogram(name: "`dynamic initializer for
> 'glob'",{{.*}} line: 15,{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition
> -// CHECK-MSVC: !DISubprogram(name: "`dynamic atexit destructor for
> 'glob'",{{.*}} line: 15,{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition
> -// CHECK-MSVC: !DISubprogram(name: "`dynamic initializer for
> 'array'",{{.*}} line: 16,{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition
> -// CHECK-MSVC: !DISubprogram(name: "__cxx_global_array_dtor",{{.*}} line:
> 16,{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition
> -// CHECK-MSVC: !DISubprogram(name: "`dynamic atexit destructor for
> 'array'",{{.*}} line: 16,{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition
> -// CHECK-MSVC: !DISubprogram(name: "`dynamic atexit destructor for
> 'stat'",{{.*}} line: 19,{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition
> +// CHECK-MSVC: !DISubprogram(name: "`dynamic initializer for
> 'glob'",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit |
> DISPFlagDefinition
> +// CHECK-MSVC: !DISubprogram(name: "`dynamic atexit destructor for
> 'glob'",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit |
> DISPFlagDefinition
> +// CHECK-MSVC: !DISubprogram(name: "`dynamic initializer for
> 'array'",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit |
> DISPFlagDefinition
> +// CHECK-MSVC: !DISubprogram(name: "__cxx_global_array_dtor",{{.*}}
> flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
> +// CHECK-MSVC: !DISubprogram(name: "`dynamic atexit destructor for
> 'array'",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit |
> DISPFlagDefinition
> +// CHECK-MSVC: !DISubprogram(name: "`dynamic atexit destructor for
> 'stat'",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit |
> DISPFlagDefinition
>
>  // MSVC does weird stuff when templates are involved, so we don't match
> exactly,
>  // but these names are reasonable.
>  // FIXME: These should not be marked DISPFlagLocalToUnit.
> -// CHECK-MSVC: !DISubprogram(name: "FooTpl<int>::`dynamic initializer for
> 'sdm_tpl<int>'",{{.*}} line: 29,{{.*}}: DISPFlagLocalToUnit |
> DISPFlagDefinition
> -// CHECK-MSVC: !DISubprogram(name: "FooTpl<int>::`dynamic atexit
> destructor for 'sdm_tpl<int>'",{{.*}} line: 29,{{.*}}: DISPFlagLocalToUnit
> | DISPFlagDefinition
> +// CHECK-MSVC: !DISubprogram(name: "FooTpl<int>::`dynamic initializer for
> 'sdm_tpl<int>'",{{.*}} flags: DIFlagArtificial, spFlags:
> DISPFlagLocalToUnit | DISPFlagDefinition
> +// CHECK-MSVC: !DISubprogram(name: "FooTpl<int>::`dynamic atexit
> destructor for 'sdm_tpl<int>'",{{.*}} flags: DIFlagArtificial, spFlags:
> DISPFlagLocalToUnit | DISPFlagDefinition
> +// CHECK-MSVC: !DISubprogram(linkageName:
> "_GLOBAL__sub_I_debug_info_global_ctor_dtor.cpp",{{.*}} flags:
> DIFlagArtificial
> \ No newline at end of file
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-line.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-line.cpp?rev=371080&r1=371079&r2=371080&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/debug-info-line.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-line.cpp Thu Sep  5 08:24:49 2019
> @@ -314,7 +314,7 @@ void f25() {
>  // CHECK: [[DBG_F9]] = !DILocation(line: 1000,
>  // CHECK: [[DBG_F10_STORE]] = !DILocation(line: 1100,
>  // CHECK: [[DBG_GLBL_CTOR_B]] = !DILocation(line: 1200,
> -// CHECK: [[DBG_GLBL_DTOR_B]] = !DILocation(line: 1200,
> +// CHECK: [[DBG_GLBL_DTOR_B]] = !DILocation(line: 0,
>  // CHECK: [[DBG_F11]] = !DILocation(line: 1300,
>  // CHECK: [[DBG_F12]] = !DILocation(line: 1400,
>  // CHECK: [[DBG_F13]] = !DILocation(line: 1500,
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190905/1636e3f3/attachment-0001.html>


More information about the cfe-commits mailing list