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)

llvm-svn: 183149
This commit is contained in:
David Blaikie 2013-06-03 19:46:44 +00:00
parent 93f33235e5
commit 778627a010
2 changed files with 6 additions and 1 deletions

View File

@ -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();

View File

@ -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}}
}
}