summaryrefslogtreecommitdiffstats
path: root/clang/unittests/AST/SourceLocationTest.cpp
diff options
context:
space:
mode:
authorAaron Ballman <aaron@aaronballman.com>2015-03-24 15:07:53 +0000
committerAaron Ballman <aaron@aaronballman.com>2015-03-24 15:07:53 +0000
commitf4cb2be05a51c6ee3aaf3939d729fe63bb81960f (patch)
tree702c257367a532ecfa454eaafea11497f8f8943f /clang/unittests/AST/SourceLocationTest.cpp
parent667ef229202b29c4a31e3693a815adf8729f4fd1 (diff)
downloadbcm5719-llvm-f4cb2be05a51c6ee3aaf3939d729fe63bb81960f.tar.gz
bcm5719-llvm-f4cb2be05a51c6ee3aaf3939d729fe63bb81960f.zip
Track the source location of the dot or arrow operator in a MemberExpr.
Patch by Joe Ranieri! llvm-svn: 233085
Diffstat (limited to 'clang/unittests/AST/SourceLocationTest.cpp')
-rw-r--r--clang/unittests/AST/SourceLocationTest.cpp44
1 files changed, 38 insertions, 6 deletions
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<VarDecl> Verifier;
- Verifier.expectRange(1, 1, 1, 23);
+ memberExpr()));
+}
+
+class MemberExprArrowLocVerifier : public RangeVerifier<MemberExpr> {
+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<VarDecl> Verifier;
+ Verifier.expectRange(1, 1, 1, 23);
EXPECT_TRUE(Verifier.match("int a[(int)(void*)1234];",
varDecl(), Lang_C89));
}
OpenPOWER on IntegriCloud