]> granicus.if.org Git - clang/commitdiff
[libclang] Allow indexing/get-cursor/etc. for the exception variable in a C++ catch.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Sat, 3 Dec 2011 03:49:44 +0000 (03:49 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Sat, 3 Dec 2011 03:49:44 +0000 (03:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145750 91177308-0d34-0410-b5e6-96231b3b80d8

test/Index/get-cursor.cpp
tools/libclang/CIndex.cpp

index 441ed1cdabe616888ec33f78a2daa4de232cfaec..db27c241fd60df5b6c9031339769d9333b5b42eb 100644 (file)
@@ -33,6 +33,11 @@ struct YDerived : Y {
 
 void test() {
   X foo;
+
+  try {
+  } catch (X e) {
+    X x;
+  }
 }
 
 // RUN: c-index-test -cursor-at=%s:6:4 %s | FileCheck -check-prefix=CHECK-COMPLETION-1 %s
@@ -80,3 +85,7 @@ void test() {
 // RUN: c-index-test -cursor-at=%s:21:3 %s | FileCheck -check-prefix=CHECK-MEMBER %s
 // CHECK-MEMBER: FieldDecl=member:21:7 (Definition)
 // CHECK-MEMBER-NEXT: Completion string: {ResultType int}{TypedText member}
+
+// RUN: c-index-test -cursor-at=%s:38:12 -cursor-at=%s:39:5 %s | FileCheck -check-prefix=CHECK-CXXCATCH %s
+// CHECK-CXXCATCH: TypeRef=struct X:3:8
+// CHECK-CXXCATCH-NEXT: TypeRef=struct X:3:8
index 5e1d1234d97b8da7717df4eab38734777dd34e8d..a189042f56449b3e3bd54bd1b1f8d4f7f0840cc2 100644 (file)
@@ -1737,6 +1737,7 @@ public:
   void VisitCXXTypeidExpr(CXXTypeidExpr *E);
   void VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E);
   void VisitCXXUuidofExpr(CXXUuidofExpr *E);
+  void VisitCXXCatchStmt(CXXCatchStmt *S);
   void VisitDeclRefExpr(DeclRefExpr *D);
   void VisitDeclStmt(DeclStmt *S);
   void VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E);
@@ -1909,6 +1910,12 @@ void EnqueueVisitor::VisitCXXUuidofExpr(CXXUuidofExpr *E) {
   if (E->isTypeOperand())
     AddTypeLoc(E->getTypeOperandSourceInfo());
 }
+
+void EnqueueVisitor::VisitCXXCatchStmt(CXXCatchStmt *S) {
+  EnqueueChildren(S);
+  AddDecl(S->getExceptionDecl());
+}
+
 void EnqueueVisitor::VisitDeclRefExpr(DeclRefExpr *DR) {
   if (DR->hasExplicitTemplateArgs()) {
     AddExplicitTemplateArgs(&DR->getExplicitTemplateArgs());