From dcbb2fb8710459fdc8073b76a4ef73fbbcbeac9f Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Sat, 3 Dec 2011 03:49:44 +0000 Subject: [PATCH] [libclang] Allow indexing/get-cursor/etc. for the exception variable in a C++ catch. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145750 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Index/get-cursor.cpp | 9 +++++++++ tools/libclang/CIndex.cpp | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/test/Index/get-cursor.cpp b/test/Index/get-cursor.cpp index 441ed1cdab..db27c241fd 100644 --- a/test/Index/get-cursor.cpp +++ b/test/Index/get-cursor.cpp @@ -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 diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index 5e1d1234d9..a189042f56 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -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()); -- 2.40.0