r177164 - Force column info only for direct inlined functions. This should strike

Adrian Prantl aprantl at apple.com
Fri Mar 15 10:09:05 PDT 2013


Author: adrian
Date: Fri Mar 15 12:09:05 2013
New Revision: 177164

URL: http://llvm.org/viewvc/llvm-project?rev=177164&view=rev
Log:
Force column info only for direct inlined functions. This should strike
the balance between expected behavior and compatibility with the gdb
testsuite.
(GDB gets confused if we break an expression into multiple debug
stmts so we enable this behavior only for inlined functions. For the
full experience people can still use -gcolumn-info.)

Modified:
    cfe/trunk/lib/CodeGen/CGExpr.cpp
    cfe/trunk/test/CodeGenCXX/debug-info-same-line.cpp

Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=177164&r1=177163&r2=177164&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExpr.cpp Fri Mar 15 12:09:05 2013
@@ -2857,9 +2857,11 @@ RValue CodeGenFunction::EmitCallExpr(con
                                      ReturnValueSlot ReturnValue) {
   if (CGDebugInfo *DI = getDebugInfo()) {
     SourceLocation Loc = E->getLocStart();
-    DI->EmitLocation(Builder, Loc,
-      /* Force column info to be generated so we can differentiate
-         multiple call sites on the same line in the debug info. */ true);
+    // Force column info to be generated so we can differentiate
+    // multiple call sites on the same line in the debug info.
+    const FunctionDecl* Callee = E->getDirectCallee();
+    bool ForceColumnInfo = Callee && Callee->isInlineSpecified();
+    DI->EmitLocation(Builder, Loc, ForceColumnInfo);
   }
 
   // Builtins never have block type.

Modified: cfe/trunk/test/CodeGenCXX/debug-info-same-line.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-same-line.cpp?rev=177164&r1=177163&r2=177164&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/debug-info-same-line.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/debug-info-same-line.cpp Fri Mar 15 12:09:05 2013
@@ -47,12 +47,15 @@ main(int argc, char const *argv[])
 {
 
     int array[3];
+    int n;
 
     array[0] = foo (1238, 78392);
     array[1] = foo (379265, 23674);
     array[2] = foo (872934, 234);
 
-    return 0;
+    n = strange_max(array[0], strange_max(array[1], array[2]));
+
+    return n & 0xf;
 }
 
 // CHECK: define {{.*}} @_Z3fooii
@@ -79,3 +82,17 @@ main(int argc, char const *argv[])
 // CHECK:     call void @llvm.dbg.declare(metadata !{i32* %{{.*}}}, metadata ![[B_MD]]), !dbg !{{.*}}
 // result
 // CHECK: call void @llvm.dbg.declare
+
+// CHECK: define {{.*}} @main
+// CHECK: call {{.*}} @_Z3fooii
+// CHECK: call {{.*}} @_Z3fooii
+// CHECK: call {{.*}} @_Z3fooii
+// CHECK: store
+// CHECK: getelementptr
+// We want to see the same !dbg node for non-inlined functions. 
+// Needed for GDB compatibility.
+// CHECK: load {{.*}} !dbg ![[DBG:.*]]
+// CHECK: load {{.*}} !dbg ![[DBG]]
+// CHECK: load {{.*}} !dbg ![[DBG]]
+// CHECK: call {{.*}} @_Z11strange_maxii(i32 %{{.*}}, i32 %{{.*}}), !dbg ![[DBG]]
+// CHECK: call {{.*}} @_Z11strange_maxii(i32 %{{.*}}, i32 %{{.*}}), !dbg ![[DBG]]





More information about the cfe-commits mailing list