From f4cb2be05a51c6ee3aaf3939d729fe63bb81960f Mon Sep 17 00:00:00 2001 From: Aaron Ballman Date: Tue, 24 Mar 2015 15:07:53 +0000 Subject: Track the source location of the dot or arrow operator in a MemberExpr. Patch by Joe Ranieri! llvm-svn: 233085 --- clang/unittests/AST/SourceLocationTest.cpp | 44 ++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 6 deletions(-) (limited to 'clang/unittests/AST/SourceLocationTest.cpp') diff --git a/clang/unittests/AST/SourceLocationTest.cpp b/clang/unittests/AST/SourceLocationTest.cpp index 98460d959c3..c1f7b181433 100644 --- a/clang/unittests/AST/SourceLocationTest.cpp +++ b/clang/unittests/AST/SourceLocationTest.cpp @@ -106,12 +106,44 @@ TEST(MemberExpr, ImplicitMemberRange) { Verifier.expectRange(2, 30, 2, 30); EXPECT_TRUE(Verifier.match("struct S { operator int() const; };\n" "int foo(const S& s) { return s; }", - memberExpr())); -} - -TEST(VarDecl, VMTypeFixedVarDeclRange) { - RangeVerifier Verifier; - Verifier.expectRange(1, 1, 1, 23); + memberExpr())); +} + +class MemberExprArrowLocVerifier : public RangeVerifier { +protected: + virtual SourceRange getRange(const MemberExpr &Node) { + return Node.getOperatorLoc(); + } +}; + +TEST(MemberExpr, ArrowRange) { + MemberExprArrowLocVerifier Verifier; + Verifier.expectRange(2, 19, 2, 19); + EXPECT_TRUE(Verifier.match("struct S { int x; };\n" + "void foo(S *s) { s->x = 0; }", + memberExpr())); +} + +TEST(MemberExpr, MacroArrowRange) { + MemberExprArrowLocVerifier Verifier; + Verifier.expectRange(1, 24, 1, 24); + EXPECT_TRUE(Verifier.match("#define MEMBER(a, b) (a->b)\n" + "struct S { int x; };\n" + "void foo(S *s) { MEMBER(s, x) = 0; }", + memberExpr())); +} + +TEST(MemberExpr, ImplicitArrowRange) { + MemberExprArrowLocVerifier Verifier; + Verifier.expectRange(0, 0, 0, 0); + EXPECT_TRUE(Verifier.match("struct S { int x; void Test(); };\n" + "void S::Test() { x = 1; }", + memberExpr())); +} + +TEST(VarDecl, VMTypeFixedVarDeclRange) { + RangeVerifier Verifier; + Verifier.expectRange(1, 1, 1, 23); EXPECT_TRUE(Verifier.match("int a[(int)(void*)1234];", varDecl(), Lang_C89)); } -- cgit v1.2.3