diff options
-rw-r--r-- | test/Index/multiple-redecls.c | 12 | ||||
-rw-r--r-- | tools/index-test/index-test.cpp | 14 |
2 files changed, 18 insertions, 8 deletions
diff --git a/test/Index/multiple-redecls.c b/test/Index/multiple-redecls.c new file mode 100644 index 0000000000..6f1f75b02f --- /dev/null +++ b/test/Index/multiple-redecls.c @@ -0,0 +1,12 @@ +// RUN: clang-cc -emit-pch %s -o %t.ast && +// RUN: index-test %t.ast -point-at %s:8:4 -print-decls | count 2 && +// RUN: index-test %t.ast -point-at %s:8:4 -print-defs | count 1 + +static void foo(int x); + +static void bar(void) { + foo(10); +} + +void foo(int x) { +} diff --git a/tools/index-test/index-test.cpp b/tools/index-test/index-test.cpp index 63c86aac46..a188cd103e 100644 --- a/tools/index-test/index-test.cpp +++ b/tools/index-test/index-test.cpp @@ -134,15 +134,13 @@ static void ProcessDecl(Decl *D) { case PrintDecls : if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { - while (FD) { - ASTLocation(FD).print(OS); - FD = FD->getPreviousDeclaration(); - } + for (FunctionDecl::redecl_iterator I = FD->redecls_begin(), + E = FD->redecls_end(); I != E; ++I) + ASTLocation(*I).print(OS); } else if (const VarDecl *VD = dyn_cast<VarDecl>(D)) { - while (VD) { - ASTLocation(VD).print(OS); - VD = VD->getPreviousDeclaration(); - } + for (VarDecl::redecl_iterator I = VD->redecls_begin(), + E = VD->redecls_end(); I != E; ++I) + ASTLocation(*I).print(OS); } else ASTLocation(D).print(OS); break; |