Sorry for the delay. David's feedback made me realize that by associating ALL 
conditional branches with the same line number as the condition my previous 
proposal would have degraded the stepping experience for conditional 
expressions. We would no longer step to the line with the ‘&&’ in the above 
example after evaluating ‘a’.

Instead, we associate only the conditional expression’s final branch with the 
condition’s end location to avoid stepping back to the ‘if’.


http://reviews.llvm.org/D8822

Files:
  lib/CodeGen/CGStmt.cpp
  test/CodeGenCXX/debug-info-line.cpp

Index: lib/CodeGen/CGStmt.cpp
===================================================================
--- lib/CodeGen/CGStmt.cpp
+++ lib/CodeGen/CGStmt.cpp
@@ -549,7 +549,10 @@
   if (S.getElse())
     ElseBlock = createBasicBlock("if.else");
 
-  EmitBranchOnBoolExpr(S.getCond(), ThenBlock, ElseBlock, Cnt.getCount());
+  {
+    ApplyDebugLocation DL(*this, S.getCond()->getSourceRange().getEnd());
+    EmitBranchOnBoolExpr(S.getCond(), ThenBlock, ElseBlock, Cnt.getCount());
+  }
 
   // Emit the 'then' code.
   EmitBlock(ThenBlock);
Index: test/CodeGenCXX/debug-info-line.cpp
===================================================================
--- test/CodeGenCXX/debug-info-line.cpp
+++ test/CodeGenCXX/debug-info-line.cpp
@@ -217,6 +217,8 @@
 void f18(int a, int b) {
 // CHECK: icmp {{.*}}, !dbg [[DBG_F18_1:![0-9]*]]
 // CHECK: br {{.*}}, !dbg [[DBG_F18_2:![0-9]*]]
+// CHECK: icmp {{.*}}, !dbg [[DBG_F18_3:![0-9]*]]
+// CHECK: br {{.*}}, !dbg [[DBG_F18_3]]
 #line 2000
   if (a  //
       && //
@@ -228,6 +230,8 @@
 void f19(int a, int b) {
 // CHECK: icmp {{.*}}, !dbg [[DBG_F19_1:![0-9]*]]
 // CHECK: br {{.*}}, !dbg [[DBG_F19_2:![0-9]*]]
+// CHECK: icmp {{.*}}, !dbg [[DBG_F19_3:![0-9]*]]
+// CHECK: br {{.*}}, !dbg [[DBG_F19_3]]
 #line 2100
   if (a  //
       || //
@@ -317,8 +321,10 @@
 // CHECK: [[DBG_F17]] = !MDLocation(line: 1900,
 // CHECK: [[DBG_F18_1]] = !MDLocation(line: 2000,
 // CHECK: [[DBG_F18_2]] = !MDLocation(line: 2001,
+// CHECK: [[DBG_F18_3]] = !MDLocation(line: 2002,
 // CHECK: [[DBG_F19_1]] = !MDLocation(line: 2100,
 // CHECK: [[DBG_F19_2]] = !MDLocation(line: 2101,
+// CHECK: [[DBG_F19_3]] = !MDLocation(line: 2102,
 // CHECK: [[DBG_F20_1]] = !MDLocation(line: 2200,
 // CHECK: [[DBG_F23]] = !MDLocation(line: 2500,
 // CHECK: [[DBG_F24]] = !MDLocation(line: 2600,

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
Index: lib/CodeGen/CGStmt.cpp
===================================================================
--- lib/CodeGen/CGStmt.cpp
+++ lib/CodeGen/CGStmt.cpp
@@ -549,7 +549,10 @@
   if (S.getElse())
     ElseBlock = createBasicBlock("if.else");
 
-  EmitBranchOnBoolExpr(S.getCond(), ThenBlock, ElseBlock, Cnt.getCount());
+  {
+    ApplyDebugLocation DL(*this, S.getCond()->getSourceRange().getEnd());
+    EmitBranchOnBoolExpr(S.getCond(), ThenBlock, ElseBlock, Cnt.getCount());
+  }
 
   // Emit the 'then' code.
   EmitBlock(ThenBlock);
Index: test/CodeGenCXX/debug-info-line.cpp
===================================================================
--- test/CodeGenCXX/debug-info-line.cpp
+++ test/CodeGenCXX/debug-info-line.cpp
@@ -217,6 +217,8 @@
 void f18(int a, int b) {
 // CHECK: icmp {{.*}}, !dbg [[DBG_F18_1:![0-9]*]]
 // CHECK: br {{.*}}, !dbg [[DBG_F18_2:![0-9]*]]
+// CHECK: icmp {{.*}}, !dbg [[DBG_F18_3:![0-9]*]]
+// CHECK: br {{.*}}, !dbg [[DBG_F18_3]]
 #line 2000
   if (a  //
       && //
@@ -228,6 +230,8 @@
 void f19(int a, int b) {
 // CHECK: icmp {{.*}}, !dbg [[DBG_F19_1:![0-9]*]]
 // CHECK: br {{.*}}, !dbg [[DBG_F19_2:![0-9]*]]
+// CHECK: icmp {{.*}}, !dbg [[DBG_F19_3:![0-9]*]]
+// CHECK: br {{.*}}, !dbg [[DBG_F19_3]]
 #line 2100
   if (a  //
       || //
@@ -317,8 +321,10 @@
 // CHECK: [[DBG_F17]] = !MDLocation(line: 1900,
 // CHECK: [[DBG_F18_1]] = !MDLocation(line: 2000,
 // CHECK: [[DBG_F18_2]] = !MDLocation(line: 2001,
+// CHECK: [[DBG_F18_3]] = !MDLocation(line: 2002,
 // CHECK: [[DBG_F19_1]] = !MDLocation(line: 2100,
 // CHECK: [[DBG_F19_2]] = !MDLocation(line: 2101,
+// CHECK: [[DBG_F19_3]] = !MDLocation(line: 2102,
 // CHECK: [[DBG_F20_1]] = !MDLocation(line: 2200,
 // CHECK: [[DBG_F23]] = !MDLocation(line: 2500,
 // CHECK: [[DBG_F24]] = !MDLocation(line: 2600,
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to