diff options
author | Abramo Bagnara <abramo.bagnara@bugseng.com> | 2012-11-08 13:52:58 +0000 |
---|---|---|
committer | Abramo Bagnara <abramo.bagnara@bugseng.com> | 2012-11-08 13:52:58 +0000 |
commit | 13fd684ee2c7578177b7c741e8eeec91ae628fcf (patch) | |
tree | c85a551cb11d90319d91431d4823d329107dae53 | |
parent | ef7bceadf4b43c953855013577afac4c2fcb1d62 (diff) | |
download | clang-13fd684ee2c7578177b7c741e8eeec91ae628fcf.tar.gz clang-13fd684ee2c7578177b7c741e8eeec91ae628fcf.tar.bz2 clang-13fd684ee2c7578177b7c741e8eeec91ae628fcf.tar.xz |
Fixed range of implicit MemberExpr.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167581 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AST/Expr.cpp | 7 | ||||
-rw-r--r-- | unittests/AST/SourceLocationTest.cpp | 8 |
2 files changed, 13 insertions, 2 deletions
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 61dd8bd5a6..9dec1e8131 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -1327,9 +1327,12 @@ SourceLocation MemberExpr::getLocStart() const { return MemberLoc; } SourceLocation MemberExpr::getLocEnd() const { + SourceLocation EndLoc = getMemberNameInfo().getEndLoc(); if (hasExplicitTemplateArgs()) - return getRAngleLoc(); - return getMemberNameInfo().getEndLoc(); + EndLoc = getRAngleLoc(); + else if (EndLoc.isInvalid()) + EndLoc = getBase()->getLocEnd(); + return EndLoc; } void CastExpr::CheckCastConsistency() const { diff --git a/unittests/AST/SourceLocationTest.cpp b/unittests/AST/SourceLocationTest.cpp index 7d6e0c3dad..c1651bc586 100644 --- a/unittests/AST/SourceLocationTest.cpp +++ b/unittests/AST/SourceLocationTest.cpp @@ -254,5 +254,13 @@ TEST(CXXNewExpr, ArrayRange) { EXPECT_TRUE(Verifier.match("void f() { new int[10]; }", newExpr())); } +TEST(MemberExpr, ImplicitMemberRange) { + RangeVerifier<MemberExpr> Verifier; + Verifier.expectRange(2, 30, 2, 30); + EXPECT_TRUE(Verifier.match("struct S { operator int() const; };\n" + "int foo(const S& s) { return s; }", + memberExpr())); +} + } // end namespace ast_matchers } // end namespace clang |