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

David Blaikie dblaikie at gmail.com
Fri Mar 15 10:25:42 PDT 2013


On Fri, Mar 15, 2013 at 10:09 AM, Adrian Prantl <aprantl at apple.com> wrote:
> 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.)

I'm not sure I understand how this will address the issue... Perhaps
I'm misunderstanding something about this change. I have a few
questions/uncertainties:

1) You can't really determine in the frontend if a function will
actually be inlined - trying to predicate debug info on that seems
like we'll get surprising/varying debug behavior based on whether the
backend chooses to inline the function

2) If the backend doesn't inline these functions you'll still get the
same problematic behavior from GDB (stepping back to the function call
between calls to foo and bar in func(foo(), bar())), won't you?

> 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]]
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list