summaryrefslogtreecommitdiffstats
path: root/clang/tools/libclang/CXIndexDataConsumer.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2016-03-09 02:12:46 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2016-03-09 02:12:46 +0000
commit542f38f31f4a149213ad2229cb3ddcc884a4847e (patch)
tree805244b15bea5db0021f35c8581b8eea5a261107 /clang/tools/libclang/CXIndexDataConsumer.cpp
parent0ad65ac81615c76878f960f1dcb5d9fe27832ed5 (diff)
downloadbcm5719-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.cpp8
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) {
OpenPOWER on IntegriCloud