diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-07-14 03:18:40 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-07-14 03:18:40 +0000 |
commit | 12585542f56b3d163b4fa87dd0d18334aff9a3e9 (patch) | |
tree | 67b41cabdc2732cd561a1cd6023ec5a860f506e9 | |
parent | c34a7ef09b0c04dd40d212ccfe0fa39777605d6b (diff) |
Handle struct fields through the index-test tool.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@75596 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | test/Index/find-decls.c | 8 | ||||
-rw-r--r-- | test/Index/find-refs.c | 9 | ||||
-rw-r--r-- | test/Index/resolve-loc-input.c | 4 | ||||
-rw-r--r-- | test/Index/resolve-loc.c | 3 | ||||
-rw-r--r-- | test/Index/t1.c | 14 | ||||
-rw-r--r-- | tools/index-test/index-test.cpp | 14 |
6 files changed, 49 insertions, 3 deletions
diff --git a/test/Index/find-decls.c b/test/Index/find-decls.c index eb3ff895e5..1fb1a65251 100644 --- a/test/Index/find-decls.c +++ b/test/Index/find-decls.c @@ -6,4 +6,10 @@ // RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:5:47 -print-decls | count 1 && // RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:5:47 -print-decls | grep 't1.c:5:12,' && // RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:6:20 -print-decls | count 1 && -// RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:6:20 -print-decls | grep 't1.c:3:19,' +// RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:6:20 -print-decls | grep 't1.c:3:19,' && + +// field test +// RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:21:6 -print-decls | count 1 && +// RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:21:6 -print-decls | grep 't1.c:12:7,' && +// RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:22:21 -print-decls | count 1 && +// RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:22:21 -print-decls | grep 't1.c:16:7,' diff --git a/test/Index/find-refs.c b/test/Index/find-refs.c index 29bf650805..7f00bcf24e 100644 --- a/test/Index/find-refs.c +++ b/test/Index/find-refs.c @@ -15,4 +15,11 @@ // RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:5:30 -print-refs | count 3 && // RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:5:30 -print-refs | grep 't1.c:5:27,' && // RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:5:30 -print-refs | grep 't1.c:5:44,' && -// RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:5:30 -print-refs | grep 't1.c:6:26,' +// RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:5:30 -print-refs | grep 't1.c:6:26,' && + +// field test +// FIXME: References point at the start of MemberExpr, make them point at the field instead. +// RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:12:7 -print-refs | count 1 && +// RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:12:7 -print-refs | grep 't1.c:21:3,' && +// RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:16:7 -print-refs | count 1 && +// RUN: index-test %t1.ast %t2.ast -point-at %S/t1.c:16:7 -print-refs | grep 't1.c:22:3,' diff --git a/test/Index/resolve-loc-input.c b/test/Index/resolve-loc-input.c index c03dbb3951..a36ae67269 100644 --- a/test/Index/resolve-loc-input.c +++ b/test/Index/resolve-loc-input.c @@ -8,3 +8,7 @@ void top_func_def(int param2) { int local_var2 = for_var + 1; } } + +struct S { + int field_var; +}; diff --git a/test/Index/resolve-loc.c b/test/Index/resolve-loc.c index 1a6bf4a570..7fd3ad5957 100644 --- a/test/Index/resolve-loc.c +++ b/test/Index/resolve-loc.c @@ -11,3 +11,6 @@ // RUN: index-test %t.ast -point-at %S/resolve-loc-input.c:8:9 | grep local_var2 && // RUN: index-test %t.ast -point-at %S/resolve-loc-input.c:8:30 | grep local_var2 && // RUN: index-test %t.ast -point-at %S/resolve-loc-input.c:8:30 | grep 'for_var + 1' && + +// fields test. +// RUN: index-test %t.ast -point-at %S/resolve-loc-input.c:13:10 | grep field_var diff --git a/test/Index/t1.c b/test/Index/t1.c index 1ff89ca34b..17cdb7dc4f 100644 --- a/test/Index/t1.c +++ b/test/Index/t1.c @@ -7,3 +7,17 @@ void foo_func(int param1) { } bar_func(); } + +struct S1 { + int x; +}; + +struct S2 { + int x; +}; + +void field_test(void) { + struct S1 s1; + s1.x = 0; + ((struct S2 *)0)->x = 0; +} diff --git a/tools/index-test/index-test.cpp b/tools/index-test/index-test.cpp index 815d0d0adf..b7471a1c9d 100644 --- a/tools/index-test/index-test.cpp +++ b/tools/index-test/index-test.cpp @@ -95,6 +95,8 @@ DisableFree("disable-free", llvm::cl::desc("Disable freeing of memory on exit"), llvm::cl::init(false)); +static bool HadErrors = false; + static void ProcessDecl(Decl *D) { assert(D); llvm::raw_ostream &OS = llvm::outs(); @@ -155,10 +157,17 @@ static void ProcessASTLocation(ASTLocation ASTLoc, IndexProvider &IdxProvider) { if (ASTLoc.isStmt()) { if (DeclRefExpr *RefExpr = dyn_cast<DeclRefExpr>(ASTLoc.getStmt())) D = RefExpr->getDecl(); + else if (MemberExpr *ME = dyn_cast<MemberExpr>(ASTLoc.getStmt())) + D = ME->getMemberDecl(); } else { D = ASTLoc.getDecl(); } - assert(D); + + if (D == 0) { + llvm::errs() << "Error: Couldn't get a Decl out of the ASTLocation"; + HadErrors = true; + return; + } Entity *Ent = Entity::get(D, IdxProvider.getProgram()); // If there is no Entity associated with this Decl, it means that it's not @@ -267,6 +276,9 @@ int main(int argc, char **argv) { ProcessASTLocation(ASTLoc, IdxProvider); } } + + if (HadErrors) + return 1; if (!DisableFree) { for (int i=0, e=TUnits.size(); i != e; ++i) |