forked from OSchip/llvm-project
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.) llvm-svn: 177164
This commit is contained in:
parent
1c150a0d0d
commit
5acf8a3ac5
|
@ -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.
|
||||
|
|
|
@ -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]]
|
||||
|
|
Loading…
Reference in New Issue