From 16b0a310f5649d25849d84409841f401e7a9a0e5 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Mon, 3 Jun 2013 19:46:44 +0000 Subject: [PATCH] UnresolvedMemberExpr should have an expr location of the member (not the base) This matches the behavior of MemberExpr and makes diagnostics such as "reference to non-static member function must be called" more legible in the case that the base & member are split over multiple lines (prior to this change the diagnostic would point to the base, not the member - making it very unclear in chained multi-line builder-style calls) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183149 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/ExprCXX.h | 4 ++++ test/SemaCXX/overloaded-operator.cpp | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/clang/AST/ExprCXX.h b/include/clang/AST/ExprCXX.h index a2259903ef..42fc117fb4 100644 --- a/include/clang/AST/ExprCXX.h +++ b/include/clang/AST/ExprCXX.h @@ -3387,6 +3387,10 @@ public: // expression refers to. SourceLocation getMemberLoc() const { return getNameLoc(); } + // \brief Return the preferred location (the member name) for the arrow when + // diagnosing a problem with this expression. + SourceLocation getExprLoc() const LLVM_READONLY { return getMemberLoc(); } + SourceLocation getLocStart() const LLVM_READONLY { if (!isImplicitAccess()) return Base->getLocStart(); diff --git a/test/SemaCXX/overloaded-operator.cpp b/test/SemaCXX/overloaded-operator.cpp index e5b3fab33c..d794850a39 100644 --- a/test/SemaCXX/overloaded-operator.cpp +++ b/test/SemaCXX/overloaded-operator.cpp @@ -396,7 +396,8 @@ namespace rdar9136502 { }; void f(X x, Y y) { - y << x.i; // expected-error{{reference to non-static member function must be called}} + y << x + .i; // expected-error{{reference to non-static member function must be called}} } } -- 2.40.0