forked from OSchip/llvm-project
Revert: [DebugInfo] Add debug location to stubs generated by CGDeclCXX and mark them as artificial
llvm-svn: 371113
This commit is contained in:
parent
afd8249278
commit
3181773116
|
@ -31,7 +31,6 @@ enum class DynamicInitKind : unsigned {
|
||||||
NoStub = 0,
|
NoStub = 0,
|
||||||
Initializer,
|
Initializer,
|
||||||
AtExit,
|
AtExit,
|
||||||
GlobalArrayDestructor
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// GlobalDecl - represents a global declaration. This can either be a
|
/// GlobalDecl - represents a global declaration. This can either be a
|
||||||
|
|
|
@ -1910,8 +1910,7 @@ StringRef CGDebugInfo::getDynamicInitializerName(const VarDecl *VD,
|
||||||
llvm::Function *InitFn) {
|
llvm::Function *InitFn) {
|
||||||
// If we're not emitting codeview, use the mangled name. For Itanium, this is
|
// If we're not emitting codeview, use the mangled name. For Itanium, this is
|
||||||
// arbitrary.
|
// arbitrary.
|
||||||
if (!CGM.getCodeGenOpts().EmitCodeView ||
|
if (!CGM.getCodeGenOpts().EmitCodeView)
|
||||||
StubKind == DynamicInitKind::GlobalArrayDestructor)
|
|
||||||
return InitFn->getName();
|
return InitFn->getName();
|
||||||
|
|
||||||
// Print the normal qualified name for the variable, then break off the last
|
// Print the normal qualified name for the variable, then break off the last
|
||||||
|
@ -1936,7 +1935,6 @@ StringRef CGDebugInfo::getDynamicInitializerName(const VarDecl *VD,
|
||||||
|
|
||||||
switch (StubKind) {
|
switch (StubKind) {
|
||||||
case DynamicInitKind::NoStub:
|
case DynamicInitKind::NoStub:
|
||||||
case DynamicInitKind::GlobalArrayDestructor:
|
|
||||||
llvm_unreachable("not an initializer");
|
llvm_unreachable("not an initializer");
|
||||||
case DynamicInitKind::Initializer:
|
case DynamicInitKind::Initializer:
|
||||||
OS << "`dynamic initializer for '";
|
OS << "`dynamic initializer for '";
|
||||||
|
@ -3571,8 +3569,7 @@ void CGDebugInfo::EmitFunctionStart(GlobalDecl GD, SourceLocation Loc,
|
||||||
if (Name.startswith("\01"))
|
if (Name.startswith("\01"))
|
||||||
Name = Name.substr(1);
|
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;
|
Flags |= llvm::DINode::FlagArtificial;
|
||||||
// Artificial functions should not silently reuse CurLoc.
|
// Artificial functions should not silently reuse CurLoc.
|
||||||
CurLoc = SourceLocation();
|
CurLoc = SourceLocation();
|
||||||
|
|
|
@ -247,8 +247,6 @@ llvm::Function *CodeGenFunction::createAtExitStub(const VarDecl &VD,
|
||||||
|
|
||||||
CGF.StartFunction(GlobalDecl(&VD, DynamicInitKind::AtExit),
|
CGF.StartFunction(GlobalDecl(&VD, DynamicInitKind::AtExit),
|
||||||
CGM.getContext().VoidTy, fn, FI, FunctionArgList());
|
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);
|
llvm::CallInst *call = CGF.Builder.CreateCall(dtor, addr);
|
||||||
|
|
||||||
|
@ -644,9 +642,8 @@ void CodeGenFunction::GenerateCXXGlobalVarDeclInitFunc(llvm::Function *Fn,
|
||||||
|
|
||||||
StartFunction(GlobalDecl(D, DynamicInitKind::Initializer),
|
StartFunction(GlobalDecl(D, DynamicInitKind::Initializer),
|
||||||
getContext().VoidTy, Fn, getTypes().arrangeNullaryFunction(),
|
getContext().VoidTy, Fn, getTypes().arrangeNullaryFunction(),
|
||||||
FunctionArgList());
|
FunctionArgList(), D->getLocation(),
|
||||||
// Emit an artificial location for this function.
|
D->getInit()->getExprLoc());
|
||||||
auto AL = ApplyDebugLocation::CreateArtificial(*this);
|
|
||||||
|
|
||||||
// Use guarded initialization if the global variable is weak. This
|
// Use guarded initialization if the global variable is weak. This
|
||||||
// occurs for, e.g., instantiated static data members and
|
// occurs for, e.g., instantiated static data members and
|
||||||
|
@ -771,10 +768,7 @@ llvm::Function *CodeGenFunction::generateDestroyHelper(
|
||||||
|
|
||||||
CurEHLocation = VD->getBeginLoc();
|
CurEHLocation = VD->getBeginLoc();
|
||||||
|
|
||||||
StartFunction(GlobalDecl(VD, DynamicInitKind::GlobalArrayDestructor),
|
StartFunction(VD, getContext().VoidTy, fn, FI, args);
|
||||||
getContext().VoidTy, fn, FI, args);
|
|
||||||
// Emit an artificial location for this function.
|
|
||||||
auto AL = ApplyDebugLocation::CreateArtificial(*this);
|
|
||||||
|
|
||||||
emitDestroy(addr, type, destroyer, useEHCleanupForArray);
|
emitDestroy(addr, type, destroyer, useEHCleanupForArray);
|
||||||
|
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
// 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@UB@@@@XZ@YAXXZ"()
|
|
||||||
// CHECK-SAME: !dbg ![[SUBPROGRAM:[0-9]+]] {
|
|
||||||
// CHECK: call void @"??1?$c@UB@@@@QEAA@XZ"(%struct.c* @"?f@?1??d@@YAPEAU?$c@UB@@@@XZ@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]])
|
|
|
@ -1,24 +0,0 @@
|
||||||
// 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@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,
|
|
|
@ -29,26 +29,25 @@ template <typename U>
|
||||||
A FooTpl<T>::sdm_tpl(sizeof(U) + sizeof(T));
|
A FooTpl<T>::sdm_tpl(sizeof(U) + sizeof(T));
|
||||||
template A FooTpl<int>::sdm_tpl<int>;
|
template A FooTpl<int>::sdm_tpl<int>;
|
||||||
|
|
||||||
// CHECK-NOKEXT: !DISubprogram(name: "__cxx_global_var_init",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-NOKEXT: !DISubprogram(name: "__cxx_global_var_init",{{.*}} line: 15,{{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
// CHECK-NOKEXT: !DISubprogram(name: "__dtor_glob",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-NOKEXT: !DISubprogram(name: "__dtor_glob",{{.*}} line: 15,{{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
// CHECK-NOKEXT: !DISubprogram(name: "__cxx_global_var_init.1",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-NOKEXT: !DISubprogram(name: "__cxx_global_var_init.1",{{.*}} line: 16,{{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
// CHECK-NOKEXT: !DISubprogram(name: "__cxx_global_array_dtor",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-NOKEXT: !DISubprogram(name: "__cxx_global_array_dtor",{{.*}} line: 16,{{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
// CHECK-NOKEXT: !DISubprogram(name: "__dtor_array",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-NOKEXT: !DISubprogram(name: "__dtor_array",{{.*}} line: 16,{{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
// CHECK-NOKEXT: !DISubprogram(name: "__dtor__ZZ3foovE4stat",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-NOKEXT: !DISubprogram(name: "__dtor__ZZ3foovE4stat",{{.*}} line: 19,{{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
// CHECK-NOKEXT: !DISubprogram({{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-NOKEXT: !DISubprogram({{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
|
|
||||||
// CHECK-KEXT: !DISubprogram({{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-KEXT: !DISubprogram({{.*}} DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
|
|
||||||
// CHECK-MSVC: !DISubprogram(name: "`dynamic initializer for 'glob'",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-MSVC: !DISubprogram(name: "`dynamic initializer for 'glob'",{{.*}} line: 15,{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
// CHECK-MSVC: !DISubprogram(name: "`dynamic atexit destructor for 'glob'",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-MSVC: !DISubprogram(name: "`dynamic atexit destructor for 'glob'",{{.*}} line: 15,{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
// CHECK-MSVC: !DISubprogram(name: "`dynamic initializer for 'array'",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-MSVC: !DISubprogram(name: "`dynamic initializer for 'array'",{{.*}} line: 16,{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
// CHECK-MSVC: !DISubprogram(name: "__cxx_global_array_dtor",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-MSVC: !DISubprogram(name: "__cxx_global_array_dtor",{{.*}} line: 16,{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
// CHECK-MSVC: !DISubprogram(name: "`dynamic atexit destructor for 'array'",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-MSVC: !DISubprogram(name: "`dynamic atexit destructor for 'array'",{{.*}} line: 16,{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
// CHECK-MSVC: !DISubprogram(name: "`dynamic atexit destructor for 'stat'",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-MSVC: !DISubprogram(name: "`dynamic atexit destructor for 'stat'",{{.*}} line: 19,{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
|
|
||||||
// MSVC does weird stuff when templates are involved, so we don't match exactly,
|
// MSVC does weird stuff when templates are involved, so we don't match exactly,
|
||||||
// but these names are reasonable.
|
// but these names are reasonable.
|
||||||
// FIXME: These should not be marked DISPFlagLocalToUnit.
|
// FIXME: These should not be marked DISPFlagLocalToUnit.
|
||||||
// CHECK-MSVC: !DISubprogram(name: "FooTpl<int>::`dynamic initializer for 'sdm_tpl<int>'",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
|
// 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>'",{{.*}} flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition
|
// CHECK-MSVC: !DISubprogram(name: "FooTpl<int>::`dynamic atexit destructor for 'sdm_tpl<int>'",{{.*}} line: 29,{{.*}}: DISPFlagLocalToUnit | DISPFlagDefinition
|
||||||
// CHECK-MSVC: !DISubprogram(linkageName: "_GLOBAL__sub_I_debug_info_global_ctor_dtor.cpp",{{.*}} flags: DIFlagArtificial
|
|
||||||
|
|
|
@ -314,7 +314,7 @@ void f25() {
|
||||||
// CHECK: [[DBG_F9]] = !DILocation(line: 1000,
|
// CHECK: [[DBG_F9]] = !DILocation(line: 1000,
|
||||||
// CHECK: [[DBG_F10_STORE]] = !DILocation(line: 1100,
|
// CHECK: [[DBG_F10_STORE]] = !DILocation(line: 1100,
|
||||||
// CHECK: [[DBG_GLBL_CTOR_B]] = !DILocation(line: 1200,
|
// CHECK: [[DBG_GLBL_CTOR_B]] = !DILocation(line: 1200,
|
||||||
// CHECK: [[DBG_GLBL_DTOR_B]] = !DILocation(line: 0,
|
// CHECK: [[DBG_GLBL_DTOR_B]] = !DILocation(line: 1200,
|
||||||
// CHECK: [[DBG_F11]] = !DILocation(line: 1300,
|
// CHECK: [[DBG_F11]] = !DILocation(line: 1300,
|
||||||
// CHECK: [[DBG_F12]] = !DILocation(line: 1400,
|
// CHECK: [[DBG_F12]] = !DILocation(line: 1400,
|
||||||
// CHECK: [[DBG_F13]] = !DILocation(line: 1500,
|
// CHECK: [[DBG_F13]] = !DILocation(line: 1500,
|
||||||
|
|
Loading…
Reference in New Issue