]> granicus.if.org Git - clang/commitdiff
DebugInfo: Fix cases where location failed to be updated after r225000
authorDavid Blaikie <dblaikie@gmail.com>
Fri, 2 Jan 2015 19:06:25 +0000 (19:06 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Fri, 2 Jan 2015 19:06:25 +0000 (19:06 +0000)
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
lib/CodeGen/CGDebugInfo.h
test/CodeGenCXX/debug-info-line.cpp

index 85368882e6db09f6e3aa217ce36d288d71bc404a..9f993b804fe83f23e5d8b8d00c887a8ef039e8b6 100644 (file)
@@ -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));
index 274cbc4f3659768a4114e1acf66d4cdc31629054..92af27e4cc90cbb32a2365c810b3ce8ee90d66e4 100644 (file)
@@ -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;
index 714f8953330ca339fa4509d4e5bc618ddf914d43..a4dff576efc078888cfb86db1c88c4e2ff55fab1 100644 (file)
@@ -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,