diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2016-03-09 02:12:46 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2016-03-09 02:12:46 +0000 |
commit | 542f38f31f4a149213ad2229cb3ddcc884a4847e (patch) | |
tree | 805244b15bea5db0021f35c8581b8eea5a261107 /clang/tools/libclang/CXIndexDataConsumer.cpp | |
parent | 0ad65ac81615c76878f960f1dcb5d9fe27832ed5 (diff) | |
download | bcm5719-llvm-542f38f31f4a149213ad2229cb3ddcc884a4847e.tar.gz bcm5719-llvm-542f38f31f4a149213ad2229cb3ddcc884a4847e.zip |
[index] libclang: Make sure to treat forward ObjC protocols as ObjCProtocolRef declarations, and fix related crash.
rdar://25035376
llvm-svn: 262985
Diffstat (limited to 'clang/tools/libclang/CXIndexDataConsumer.cpp')
-rw-r--r-- | clang/tools/libclang/CXIndexDataConsumer.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/tools/libclang/CXIndexDataConsumer.cpp b/clang/tools/libclang/CXIndexDataConsumer.cpp index 322725ec654..4f89e43fd7b 100644 --- a/clang/tools/libclang/CXIndexDataConsumer.cpp +++ b/clang/tools/libclang/CXIndexDataConsumer.cpp @@ -171,6 +171,14 @@ bool CXIndexDataConsumer::handleDeclOccurence(const Decl *D, return true; } } + if (auto *ObjCPD = dyn_cast_or_null<ObjCProtocolDecl>(ASTNode.OrigD)) { + if (!ObjCPD->isThisDeclarationADefinition() && + ObjCPD->getLocation() == Loc) { + // The libclang API treats this as ObjCProtocolRef declaration. + IndexingDeclVisitor(*this, Loc, nullptr).Visit(ObjCPD); + return true; + } + } CXIdxEntityRefKind Kind = CXIdxEntityRef_Direct; if (Roles & (unsigned)SymbolRole::Implicit) { |