aboutsummaryrefslogtreecommitdiff
path: root/lib/Index/ASTLocation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Index/ASTLocation.cpp')
-rw-r--r--lib/Index/ASTLocation.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/Index/ASTLocation.cpp b/lib/Index/ASTLocation.cpp
index d528c5ac5f..f010a2bcc8 100644
--- a/lib/Index/ASTLocation.cpp
+++ b/lib/Index/ASTLocation.cpp
@@ -103,6 +103,18 @@ Decl *ASTLocation::FindImmediateParent(Decl *D, Stmt *Node) {
return isContainedInStatement(Node, MD->getBody()) ? D : 0;
}
+ if (BlockDecl *BD = dyn_cast<BlockDecl>(D)) {
+ for (DeclContext::decl_iterator
+ I = BD->decls_begin(), E = BD->decls_end(); I != E; ++I) {
+ Decl *Child = FindImmediateParent(*I, Node);
+ if (Child)
+ return Child;
+ }
+
+ assert(BD->getBody() && "BlockDecl without body ?");
+ return isContainedInStatement(Node, BD->getBody()) ? D : 0;
+ }
+
return 0;
}