diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-12-21 19:07:48 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-12-21 19:07:48 +0000 |
commit | 32038bb8486a1f31e8bd8e19ef388049669e9ed2 (patch) | |
tree | e1dcb49741a62a51d203767635aad12096b4d75c /tools/libclang/CIndex.cpp | |
parent | 52e64c88133c6c3153208f216d53112db5c09e8b (diff) |
When determining which preprocessed entities to traverse in libclang,
take into account the region of interest. Otherwise, we may fail to
traverse some important preprocessed entity cursors.
Fixes <rdar://problem/8554072>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122350 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/libclang/CIndex.cpp')
-rw-r--r-- | tools/libclang/CIndex.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index 38b58e0068..bd39925dad 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -410,7 +410,20 @@ CursorVisitor::getPreprocessedEntities() { = *AU->getPreprocessor().getPreprocessingRecord(); bool OnlyLocalDecls - = !AU->isMainFileAST() && AU->getOnlyLocalDecls(); + = !AU->isMainFileAST() && AU->getOnlyLocalDecls(); + + if (OnlyLocalDecls && RegionOfInterest.isValid()) { + // If we would only look at local declarations but we have a region of + // interest, check whether that region of interest is in the main file. + // If not, we should traverse all declarations. + // FIXME: My kingdom for a proper binary search approach to finding + // cursors! + std::pair<FileID, unsigned> Location + = AU->getSourceManager().getDecomposedInstantiationLoc( + RegionOfInterest.getBegin()); + if (Location.first != AU->getSourceManager().getMainFileID()) + OnlyLocalDecls = false; + } PreprocessingRecord::iterator StartEntity, EndEntity; if (OnlyLocalDecls) { |