From 92866af2f036e861d07be801d9670ad1060aef31 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Fri, 2 Jan 2015 19:06:25 +0000 Subject: [PATCH] DebugInfo: Fix cases where location failed to be updated after r225000 The optimization (that appears to have been here since the earliest implementation (r50848) & has become more complicated over the years) to avoid recreating the debugloc if it would be the same was out of date because ApplyDebugLocation was not re-updating the CurLoc/PrevLoc. This optimization doesn't look terribly beneficial/necessary, so I'm removing it - if it turns up in benchmarks, I'm happy to reconsider/reimplement this with justification, but for now it just seems to add complexity/problems. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225083 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGDebugInfo.cpp | 14 -------------- lib/CodeGen/CGDebugInfo.h | 2 +- test/CodeGenCXX/debug-info-line.cpp | 10 ++++++++++ 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index 85368882e6..9f993b804f 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -2628,20 +2628,6 @@ void CGDebugInfo::EmitLocation(CGBuilderTy &Builder, SourceLocation Loc, if (CurLoc.isInvalid() || CurLoc.isMacroID()) return; - // Don't bother if things are the same as last time. - SourceManager &SM = CGM.getContext().getSourceManager(); - assert(!LexicalBlockStack.empty()); - if (CurLoc == PrevLoc || - SM.getExpansionLoc(CurLoc) == SM.getExpansionLoc(PrevLoc)) - // New Builder may not be in sync with CGDebugInfo. - if (!Builder.getCurrentDebugLocation().isUnknown() && - Builder.getCurrentDebugLocation().getScope(CGM.getLLVMContext()) == - LexicalBlockStack.back()) - return; - - // Update last state. - PrevLoc = CurLoc; - llvm::MDNode *Scope = LexicalBlockStack.back(); Builder.SetCurrentDebugLocation(llvm::DebugLoc::get( getLineNumber(CurLoc), getColumnNumber(CurLoc, ForceColumnInfo), Scope)); diff --git a/lib/CodeGen/CGDebugInfo.h b/lib/CodeGen/CGDebugInfo.h index 274cbc4f36..92af27e4cc 100644 --- a/lib/CodeGen/CGDebugInfo.h +++ b/lib/CodeGen/CGDebugInfo.h @@ -53,7 +53,7 @@ class CGDebugInfo { const CodeGenOptions::DebugInfoKind DebugKind; llvm::DIBuilder DBuilder; llvm::DICompileUnit TheCU; - SourceLocation CurLoc, PrevLoc; + SourceLocation CurLoc; llvm::DIType VTablePtrType; llvm::DIType ClassTy; llvm::DICompositeType ObjTy; diff --git a/test/CodeGenCXX/debug-info-line.cpp b/test/CodeGenCXX/debug-info-line.cpp index 714f895333..a4dff576ef 100644 --- a/test/CodeGenCXX/debug-info-line.cpp +++ b/test/CodeGenCXX/debug-info-line.cpp @@ -130,6 +130,15 @@ void f12() { f12_2(); } +// CHECK-LABEL: define +void f13() { +// CHECK: call {{.*}} !dbg [[DBG_F13:!.*]] +#define F13_IMPL 1, src() + 1, +#line 1400 + F13_IMPL; +} + // CHECK: [[DBG_F1]] = !{i32 100, // CHECK: [[DBG_FOO_VALUE]] = !{i32 200, // CHECK: [[DBG_FOO_REF]] = !{i32 202, @@ -146,3 +155,4 @@ void f12() { // CHECK: [[DBG_F10_STORE]] = !{i32 1100, // CHECK: [[DBG_F11]] = !{i32 1200, // CHECK: [[DBG_F12]] = !{i32 1300, +// CHECK: [[DBG_F13]] = !{i32 1400, -- 2.40.0