r270775 - [CGDebugInfo] Modify the preferred expression location for member calls.

NAKAMURA Takumi via cfe-commits cfe-commits at lists.llvm.org
Thu May 26 06:28:47 PDT 2016


Could you take a look of r270841 in clang-tools-extra?

On Thu, May 26, 2016 at 7:14 AM Hal Finkel via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Author: hfinkel
> Date: Wed May 25 17:08:27 2016
> New Revision: 270775
>
> URL: http://llvm.org/viewvc/llvm-project?rev=270775&view=rev
> Log:
> [CGDebugInfo] Modify the preferred expression location for member calls.
>
> If the callee has a valid location (not all do), then use that. Otherwise,
> fall
> back to the starting location. This makes sure that the debug info for
> calls
> points to the call (not the start of the expression providing the object on
> which the member function is being called).
>
> For example, given this:
>
>   f->foo()->bar();
>
> we don't want both calls to point to the 'f', but rather to the 'foo()' and
> the 'bar()'.
>
> Fixes PR27567.
>
> Differential Revision: http://reviews.llvm.org/D19708
>
> Added:
>     cfe/trunk/test/CodeGenCXX/debug-info-member-call.cpp
> Modified:
>     cfe/trunk/include/clang/AST/ExprCXX.h
>
> Modified: cfe/trunk/include/clang/AST/ExprCXX.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ExprCXX.h?rev=270775&r1=270774&r2=270775&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/AST/ExprCXX.h (original)
> +++ cfe/trunk/include/clang/AST/ExprCXX.h Wed May 25 17:08:27 2016
> @@ -143,6 +143,14 @@ public:
>    /// FIXME: Returns 0 for member pointer call exprs.
>    CXXRecordDecl *getRecordDecl() const;
>
> +  SourceLocation getExprLoc() const LLVM_READONLY {
> +    SourceLocation CLoc = getCallee()->getExprLoc();
> +    if (CLoc.isValid())
> +      return CLoc;
> +
> +    return getLocStart();
> +  }
> +
>    static bool classof(const Stmt *T) {
>      return T->getStmtClass() == CXXMemberCallExprClass;
>    }
>
> Added: cfe/trunk/test/CodeGenCXX/debug-info-member-call.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-member-call.cpp?rev=270775&view=auto
>
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/debug-info-member-call.cpp (added)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-member-call.cpp Wed May 25
> 17:08:27 2016
> @@ -0,0 +1,24 @@
> +// RUN: %clang_cc1 -triple x86_64-unknown_unknown -emit-llvm
> -debug-info-kind=standalone -dwarf-column-info %s -o - | FileCheck %s
> +void ext();
> +
> +struct Bar {
> +  void bar() { ext(); }
> +};
> +
> +struct Foo {
> +  Bar *b;
> +
> +  Bar *foo() { return b; }
> +};
> +
> +void test(Foo *f) {
> +  f->foo()->bar();
> +}
> +
> +// CHECK-LABEL: @_Z4testP3Foo
> +// CHECK: call {{.*}} @_ZN3Foo3fooEv{{.*}}, !dbg ![[CALL1LOC:.*]]
> +// CHECK: call void @_ZN3Bar3barEv{{.*}}, !dbg ![[CALL2LOC:.*]]
> +
> +// CHECK: ![[CALL1LOC]] = !DILocation(line: [[LINE:[0-9]+]], column: 6,
> +// CHECK: ![[CALL2LOC]] = !DILocation(line: [[LINE]], column: 13,
> +
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160526/4bdf239b/attachment.html>


More information about the cfe-commits mailing list