Re: r369458 - [DebugInfo] Add debug location to dynamic atexit destructor
This broke the Chromium build, see https://bugs.chromium.org/p/chromium/issues/detail?id=996618#c1 for a reproducer. I've reverted in r369633. On Wed, Aug 21, 2019 at 12:08 AM Alexandre Ganea via cfe-commits wrote: > > Author: aganea > Date: Tue Aug 20 15:09:49 2019 > New Revision: 369458 > > URL: http://llvm.org/viewvc/llvm-project?rev=369458=rev > Log: > [DebugInfo] Add debug location to dynamic atexit destructor > > Fixes PR43012 > > Differential Revision: https://reviews.llvm.org/D66328 > > Added: > cfe/trunk/test/CodeGenCXX/debug-info-atexit-stub.cpp > Modified: > cfe/trunk/lib/CodeGen/CGDebugInfo.cpp > cfe/trunk/lib/CodeGen/CGDeclCXX.cpp > cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp > > Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=369458=369457=369458=diff > == > --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Tue Aug 20 15:09:49 2019 > @@ -3564,7 +3564,8 @@ void CGDebugInfo::EmitFunctionStart(Glob >if (Name.startswith("\01")) > Name = Name.substr(1); > > - if (!HasDecl || D->isImplicit() || D->hasAttr()) { > + if (!HasDecl || D->isImplicit() || D->hasAttr() || > + (isa(D) && GD.getDynamicInitKind() == > DynamicInitKind::AtExit)) { > 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=369458=369457=369458=diff > == > --- cfe/trunk/lib/CodeGen/CGDeclCXX.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGDeclCXX.cpp Tue Aug 20 15:09:49 2019 > @@ -247,6 +247,8 @@ llvm::Function *CodeGenFunction::createA > >CGF.StartFunction(GlobalDecl(, 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); > > > 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=369458=auto > == > --- cfe/trunk/test/CodeGenCXX/debug-info-atexit-stub.cpp (added) > +++ cfe/trunk/test/CodeGenCXX/debug-info-atexit-stub.cpp Tue Aug 20 15:09:49 > 2019 > @@ -0,0 +1,20 @@ > +// RUN: %clang_cc1 -emit-llvm %s -gcodeview -debug-info-kind=limited -o - | > FileCheck %s > + > +struct a { > + ~a(); > +}; > +template struct c : a { > + c(void (b::*)()); > +}; > +struct B { > + virtual void e(); > +}; > +c *d() { static c f(::e); return } > + > +// CHECK: define internal void @"??__Ff@?1??d@@YAPEAU?$c@UBXZ@YAXXZ"() > +// CHECK-SAME: !dbg ![[SUBPROGRAM:[0-9]+]] { > +// CHECK: call void @"??1?$c@UBQEAA@XZ"(%struct.c* > @"?f@?1??d@@YAPEAU?$c@UBXZ@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]]) > > 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=369458=369457=369458=diff > == > --- cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp (original) > +++ cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp Tue Aug 20 > 15:09:49 2019 > @@ -30,24 +30,24 @@ A FooTpl::sdm_tpl(sizeof(U) + sizeof( > template A FooTpl::sdm_tpl; > > // 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: "__dtor_glob",{{.*}}: > 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:
r369633 - Revert r369458 "[DebugInfo] Add debug location to dynamic atexit destructor"
Author: hans Date: Thu Aug 22 02:07:25 2019 New Revision: 369633 URL: http://llvm.org/viewvc/llvm-project?rev=369633=rev Log: Revert r369458 "[DebugInfo] Add debug location to dynamic atexit destructor" It causes the build to fail with "inlinable function call in a function with debug info must have a !dbg location" in Chromium. See llvm-commits thread for more info. (This also reverts the follow-up in r369474.) > Fixes PR43012 > > Differential Revision: https://reviews.llvm.org/D66328 Removed: cfe/trunk/test/CodeGenCXX/debug-info-atexit-stub.cpp Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp cfe/trunk/lib/CodeGen/CGDeclCXX.cpp cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=369633=369632=369633=diff == --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Thu Aug 22 02:07:25 2019 @@ -3564,8 +3564,7 @@ void CGDebugInfo::EmitFunctionStart(Glob if (Name.startswith("\01")) Name = Name.substr(1); - if (!HasDecl || D->isImplicit() || D->hasAttr() || - (isa(D) && GD.getDynamicInitKind() == DynamicInitKind::AtExit)) { + if (!HasDecl || D->isImplicit() || D->hasAttr()) { 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=369633=369632=369633=diff == --- cfe/trunk/lib/CodeGen/CGDeclCXX.cpp (original) +++ cfe/trunk/lib/CodeGen/CGDeclCXX.cpp Thu Aug 22 02:07:25 2019 @@ -247,8 +247,6 @@ llvm::Function *CodeGenFunction::createA CGF.StartFunction(GlobalDecl(, 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); Removed: 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=369632=auto == --- cfe/trunk/test/CodeGenCXX/debug-info-atexit-stub.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-atexit-stub.cpp (removed) @@ -1,20 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-windows-msvc -emit-llvm %s -gcodeview -debug-info-kind=limited -o - | FileCheck %s - -struct a { - ~a(); -}; -template struct c : a { - c(void (b::*)()); -}; -struct B { - virtual void e(); -}; -c *d() { static c f(::e); return } - -// CHECK: define internal void @"??__Ff@?1??d@@YAPEAU?$c@UBXZ@YAXXZ"() -// CHECK-SAME: !dbg ![[SUBPROGRAM:[0-9]+]] { -// CHECK: call void @"??1?$c@UBQEAA@XZ"(%struct.c* @"?f@?1??d@@YAPEAU?$c@UBXZ@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]]) 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=369633=369632=369633=diff == --- cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp Thu Aug 22 02:07:25 2019 @@ -30,24 +30,24 @@ A FooTpl::sdm_tpl(sizeof(U) + sizeof( template A FooTpl::sdm_tpl; // CHECK-NOKEXT: !DISubprogram(name: "__cxx_global_var_init",{{.*}} line: 15,{{.*}} DISPFlagLocalToUnit | DISPFlagDefinition -// CHECK-NOKEXT: !DISubprogram(name: "__dtor_glob",{{.*}}: 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",{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition -// CHECK-NOKEXT: !DISubprogram(name: "__dtor__ZZ3foovE4stat",{{.*}} DISPFlagLocalToUnit | DISPFlagDefinition +// CHECK-NOKEXT: !DISubprogram(name: "__dtor_arr
r369458 - [DebugInfo] Add debug location to dynamic atexit destructor
Author: aganea Date: Tue Aug 20 15:09:49 2019 New Revision: 369458 URL: http://llvm.org/viewvc/llvm-project?rev=369458=rev Log: [DebugInfo] Add debug location to dynamic atexit destructor Fixes PR43012 Differential Revision: https://reviews.llvm.org/D66328 Added: cfe/trunk/test/CodeGenCXX/debug-info-atexit-stub.cpp Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp cfe/trunk/lib/CodeGen/CGDeclCXX.cpp cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=369458=369457=369458=diff == --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Tue Aug 20 15:09:49 2019 @@ -3564,7 +3564,8 @@ void CGDebugInfo::EmitFunctionStart(Glob if (Name.startswith("\01")) Name = Name.substr(1); - if (!HasDecl || D->isImplicit() || D->hasAttr()) { + if (!HasDecl || D->isImplicit() || D->hasAttr() || + (isa(D) && GD.getDynamicInitKind() == DynamicInitKind::AtExit)) { 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=369458=369457=369458=diff == --- cfe/trunk/lib/CodeGen/CGDeclCXX.cpp (original) +++ cfe/trunk/lib/CodeGen/CGDeclCXX.cpp Tue Aug 20 15:09:49 2019 @@ -247,6 +247,8 @@ llvm::Function *CodeGenFunction::createA CGF.StartFunction(GlobalDecl(, 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); 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=369458=auto == --- cfe/trunk/test/CodeGenCXX/debug-info-atexit-stub.cpp (added) +++ cfe/trunk/test/CodeGenCXX/debug-info-atexit-stub.cpp Tue Aug 20 15:09:49 2019 @@ -0,0 +1,20 @@ +// RUN: %clang_cc1 -emit-llvm %s -gcodeview -debug-info-kind=limited -o - | FileCheck %s + +struct a { + ~a(); +}; +template struct c : a { + c(void (b::*)()); +}; +struct B { + virtual void e(); +}; +c *d() { static c f(::e); return } + +// CHECK: define internal void @"??__Ff@?1??d@@YAPEAU?$c@UBXZ@YAXXZ"() +// CHECK-SAME: !dbg ![[SUBPROGRAM:[0-9]+]] { +// CHECK: call void @"??1?$c@UBQEAA@XZ"(%struct.c* @"?f@?1??d@@YAPEAU?$c@UBXZ@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]]) 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=369458=369457=369458=diff == --- cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp Tue Aug 20 15:09:49 2019 @@ -30,24 +30,24 @@ A FooTpl::sdm_tpl(sizeof(U) + sizeof( template A FooTpl::sdm_tpl; // 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: "__dtor_glob",{{.*}}: 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: "__dtor_array",{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition +// CHECK-NOKEXT: !DISubprogram(name: "__dtor__ZZ3foovE4stat",{{.*}} DISPFlagLocalToUnit | DISPFlagDefinition // CHECK-NOKEXT: !DISubprogram({{.*}} DISPFlagLocalToUnit | DISPFlagDefinition // CHECK-KEXT: !DISubprogram({{.*}} DISPFlagLocalToUnit | DISPFlagDefinition // CHECK-MSVC: !DISubprogram(name: "`dynamic initializer for 'glob'",{{.*}}