summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2014-11-13 09:03:21 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2014-11-13 09:03:21 +0000
commit998912453d049e8c0c1df781df0cc01dbe6c4831 (patch)
tree168b4cabe6b2664df89e160525573d4e1b22d41c /clang
parente830c60d89f65202b729d962693055a1cac2b7fd (diff)
downloadbcm5719-llvm-998912453d049e8c0c1df781df0cc01dbe6c4831.tar.gz
bcm5719-llvm-998912453d049e8c0c1df781df0cc01dbe6c4831.zip
[liblang] Handle CXXForRangeStmt during AST visitation.
llvm-svn: 221874
Diffstat (limited to 'clang')
-rw-r--r--clang/test/Index/get-cursor.cpp13
-rw-r--r--clang/tools/libclang/CIndex.cpp6
2 files changed, 19 insertions, 0 deletions
diff --git a/clang/test/Index/get-cursor.cpp b/clang/test/Index/get-cursor.cpp
index 211ecb3497f..bdee1653d06 100644
--- a/clang/test/Index/get-cursor.cpp
+++ b/clang/test/Index/get-cursor.cpp
@@ -132,6 +132,15 @@ class A {
explicit operator bool() const;
};
+struct TestColl {
+ int* begin();
+ int* end();
+};
+
+void test(TestColl coll) {
+ for (auto lv : coll) {}
+}
+
// RUN: c-index-test -cursor-at=%s:6:4 %s | FileCheck -check-prefix=CHECK-COMPLETION-1 %s
// CHECK-COMPLETION-1: CXXConstructor=X:6:3
// CHECK-COMPLETION-1-NEXT: Completion string: {TypedText X}{LeftParen (}{Placeholder int}{Comma , }{Placeholder int}{RightParen )}
@@ -243,3 +252,7 @@ class A {
// CHECK-SPELLING: 129:6 CXXMethod=operator->:129:6 Extent=[129:3 - 129:18] Spelling=operator-> ([129:6 - 129:16])
// CHECK-SPELLING: 130:6 CXXMethod=operator():130:6 (const) Extent=[130:3 - 130:37] Spelling=operator() ([130:6 - 130:16])
// CHECK-SPELLING: 132:12 CXXConversion=operator bool:132:12 (const) Extent=[132:3 - 132:33] Spelling=operator bool ([132:12 - 132:25])
+
+// RUN: c-index-test -cursor-at=%s:141:13 -cursor-at=%s:141:18 -std=c++11 %s | FileCheck -check-prefix=CHECK-FORRANGE %s
+// CHECK-FORRANGE: 141:13 VarDecl=lv:141:13 (Definition) Extent=[141:8 - 141:17] Spelling=lv ([141:13 - 141:15])
+// CHECK-FORRANGE: 141:18 DeclRefExpr=coll:140:20 Extent=[141:18 - 141:22] Spelling=coll ([141:18 - 141:22])
diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp
index 084e9d9cc4a..0e42a94b543 100644
--- a/clang/tools/libclang/CIndex.cpp
+++ b/clang/tools/libclang/CIndex.cpp
@@ -1834,6 +1834,7 @@ public:
void VisitCXXUnresolvedConstructExpr(const CXXUnresolvedConstructExpr *E);
void VisitCXXUuidofExpr(const CXXUuidofExpr *E);
void VisitCXXCatchStmt(const CXXCatchStmt *S);
+ void VisitCXXForRangeStmt(const CXXForRangeStmt *S);
void VisitDeclRefExpr(const DeclRefExpr *D);
void VisitDeclStmt(const DeclStmt *S);
void VisitDependentScopeDeclRefExpr(const DependentScopeDeclRefExpr *E);
@@ -2154,6 +2155,11 @@ void EnqueueVisitor::VisitCXXCatchStmt(const CXXCatchStmt *S) {
AddDecl(S->getExceptionDecl());
}
+void EnqueueVisitor::VisitCXXForRangeStmt(const CXXForRangeStmt *S) {
+ AddDecl(S->getLoopVariable());
+ AddStmt(S->getRangeInit());
+}
+
void EnqueueVisitor::VisitDeclRefExpr(const DeclRefExpr *DR) {
if (DR->hasExplicitTemplateArgs()) {
AddExplicitTemplateArgs(&DR->getExplicitTemplateArgs());
OpenPOWER on IntegriCloud