diff options
-rw-r--r-- | clang/lib/CodeGen/CGCleanup.cpp | 2 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGDebugInfo.cpp | 1 | ||||
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.cpp | 4 | ||||
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.h | 5 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/debug-info-line.cpp | 15 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/linetable-cleanup.cpp | 7 | ||||
-rw-r--r-- | clang/test/CodeGenObjC/arc-linetable.m | 12 |
7 files changed, 29 insertions, 17 deletions
diff --git a/clang/lib/CodeGen/CGCleanup.cpp b/clang/lib/CodeGen/CGCleanup.cpp index bda8d8e942c..566befc915c 100644 --- a/clang/lib/CodeGen/CGCleanup.cpp +++ b/clang/lib/CodeGen/CGCleanup.cpp @@ -861,8 +861,6 @@ void CodeGenFunction::PopCleanupBlock(bool FallthroughIsBranchThrough) { // Emit the EH cleanup if required. if (RequiresEHCleanup) { - auto AL = ApplyDebugLocation::CreateDefaultArtificial(*this, CurEHLocation); - CGBuilderTy::InsertPoint SavedIP = Builder.saveAndClearIP(); EmitBlock(EHEntry); diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 5624ce2f871..c5f358f7a1b 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -55,7 +55,6 @@ CGDebugInfo::~CGDebugInfo() { ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF, SourceLocation TemporaryLocation) : CGF(CGF) { - assert(!TemporaryLocation.isInvalid() && "invalid location"); init(TemporaryLocation); } diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index e152bfd7491..43c9dfe87a0 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -241,8 +241,6 @@ void CodeGenFunction::FinishFunction(SourceLocation EndLoc) { // edges will be *really* confused. bool EmitRetDbgLoc = true; if (EHStack.stable_begin() != PrologueCleanupDepth) { - PopCleanupBlocks(PrologueCleanupDepth); - // Make sure the line table doesn't jump back into the body for // the ret after it's been at EndLoc. EmitRetDbgLoc = false; @@ -250,6 +248,8 @@ void CodeGenFunction::FinishFunction(SourceLocation EndLoc) { if (CGDebugInfo *DI = getDebugInfo()) if (OnlySimpleReturnStmts) DI->EmitLocation(Builder, EndLoc); + + PopCleanupBlocks(PrologueCleanupDepth); } // Emit function epilog (to return). diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h index 03d2ab313fb..60e81db3753 100644 --- a/clang/lib/CodeGen/CodeGenFunction.h +++ b/clang/lib/CodeGen/CodeGenFunction.h @@ -567,7 +567,10 @@ public: // If we should perform a cleanup, force them now. Note that // this ends the cleanup scope before rescoping any labels. - if (PerformCleanup) ForceCleanup(); + if (PerformCleanup) { + ApplyDebugLocation DL(CGF, Range.getEnd()); + ForceCleanup(); + } } /// \brief Force the emission of cleanups now, instead of waiting diff --git a/clang/test/CodeGenCXX/debug-info-line.cpp b/clang/test/CodeGenCXX/debug-info-line.cpp index 5f32f3ff07f..c8d85e68362 100644 --- a/clang/test/CodeGenCXX/debug-info-line.cpp +++ b/clang/test/CodeGenCXX/debug-info-line.cpp @@ -259,6 +259,21 @@ void f21() { f21_b(); } +// CHECK-LABEL: define +struct f22_dtor { + ~f22_dtor(); +}; +void f22() { + { + f22_dtor f; + src(); +// CHECK: call {{.*}}src +// CHECK: call {{.*}}, !dbg [[DBG_F22:![0-9]*]] +// CHECK: call {{.*}}, !dbg [[DBG_F22]] +#line 2400 + } +} + // CHECK: [[DBG_F1]] = !MDLocation(line: 100, // CHECK: [[DBG_FOO_VALUE]] = !MDLocation(line: 200, // CHECK: [[DBG_FOO_REF]] = !MDLocation(line: 202, diff --git a/clang/test/CodeGenCXX/linetable-cleanup.cpp b/clang/test/CodeGenCXX/linetable-cleanup.cpp index 3a6aa88d946..0e64be19c84 100644 --- a/clang/test/CodeGenCXX/linetable-cleanup.cpp +++ b/clang/test/CodeGenCXX/linetable-cleanup.cpp @@ -4,8 +4,8 @@ // simple return expressions. // CHECK: define {{.*}}foo -// CHECK: call void @_ZN1CD1Ev(%class.C* {{.*}}), !dbg ![[CLEANUP:[0-9]+]] -// CHECK: ret i32 0, !dbg ![[RET:[0-9]+]] +// CHECK: call void @_ZN1CD1Ev(%class.C* {{.*}}), !dbg ![[RET:[0-9]+]] +// CHECK: ret i32 0, !dbg ![[RET]] // CHECK: define {{.*}}bar // CHECK: ret void, !dbg ![[RETBAR:[0-9]+]] @@ -23,9 +23,8 @@ int foo() { C c; c.i = 42; - // This breakpoint should be at/before the cleanup code. - // CHECK: ![[CLEANUP]] = !MDLocation(line: [[@LINE+1]], scope: !{{.*}}) return 0; + // This breakpoint should be at/before the cleanup code. // CHECK: ![[RET]] = !MDLocation(line: [[@LINE+1]], scope: !{{.*}}) } diff --git a/clang/test/CodeGenObjC/arc-linetable.m b/clang/test/CodeGenObjC/arc-linetable.m index 656c3434687..cd746d18c13 100644 --- a/clang/test/CodeGenObjC/arc-linetable.m +++ b/clang/test/CodeGenObjC/arc-linetable.m @@ -4,8 +4,8 @@ // CHECK: define {{.*}}testNoSideEffect // CHECK: call void @objc_storeStrong{{.*}} -// CHECK: call void @objc_storeStrong{{.*}} !dbg ![[ARC1:[0-9]+]] -// CHECK: ret {{.*}} !dbg ![[RET1:[0-9]+]] +// CHECK: call void @objc_storeStrong{{.*}} !dbg ![[RET1:[0-9]+]] +// CHECK: ret {{.*}} !dbg ![[RET1]] // CHECK: define {{.*}}testNoCleanup // CHECK: ret {{.*}} !dbg ![[RET2:[0-9]+]] @@ -21,8 +21,8 @@ // CHECK: define {{.*}}testVoid // CHECK: call void @objc_storeStrong{{.*}} -// CHECK: call void @objc_storeStrong{{.*}} !dbg ![[ARC5:[0-9]+]] -// CHECK: ret {{.*}} !dbg ![[RET5:[0-9]+]] +// CHECK: call void @objc_storeStrong{{.*}} !dbg ![[RET5:[0-9]+]] +// CHECK: ret {{.*}} !dbg ![[RET5]] // CHECK: define {{.*}}testVoidNoReturn // CHECK: @objc_msgSend{{.*}} !dbg ![[MSG6:[0-9]+]] @@ -57,9 +57,8 @@ typedef signed char BOOL; // CHECK: ![[TESTNOSIDEEFFECT:.*]] = {{.*}}[ DW_TAG_subprogram ] [line [[@LINE+1]]] [local] [def] [-[AppDelegate testNoSideEffect:]] - (int)testNoSideEffect:(NSString *)foo { int x = 1; - // CHECK: ![[ARC1]] = !MDLocation(line: [[@LINE+1]], scope: ![[TESTNOSIDEEFFECT]]) return 1; // Return expression - // CHECK: ![[RET1]] = !MDLocation(line: [[@LINE+1]], scope: !{{.*}}) + // CHECK: ![[RET1]] = !MDLocation(line: [[@LINE+1]], scope: ![[TESTNOSIDEEFFECT]]) } // Cleanup + Ret - (int)testNoCleanup { @@ -82,7 +81,6 @@ typedef signed char BOOL; } - (void)testVoid:(NSString *)foo { - // CHECK: ![[ARC5]] = !MDLocation(line: [[@LINE+1]], scope: !{{.*}}) return; // CHECK: ![[RET5]] = !MDLocation(line: [[@LINE+1]], scope: !{{.*}}) } |