diff options
-rw-r--r-- | lib/CodeGen/CGExpr.cpp | 8 | ||||
-rw-r--r-- | test/CodeGenCXX/debug-info-same-line.cpp | 19 |
2 files changed, 23 insertions, 4 deletions
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index e551343119..ad69ebe05f 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -2857,9 +2857,11 @@ RValue CodeGenFunction::EmitCallExpr(const CallExpr *E, 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. diff --git a/test/CodeGenCXX/debug-info-same-line.cpp b/test/CodeGenCXX/debug-info-same-line.cpp index 59cd405ac5..17dc55ffcf 100644 --- a/test/CodeGenCXX/debug-info-same-line.cpp +++ b/test/CodeGenCXX/debug-info-same-line.cpp @@ -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]] |