forked from OSchip/llvm-project
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>. llvm-svn: 122350
This commit is contained in:
parent
2a7ff99979
commit
fd4da71343
|
@ -0,0 +1,6 @@
|
|||
#ifndef GET_CURSOR_INCLUDES_1_H
|
||||
#define GET_CURSOR_INCLUDES_1_H
|
||||
|
||||
extern int blah;
|
||||
|
||||
#endif // GET_CURSOR_INCLUDES_1_H
|
|
@ -0,0 +1,2 @@
|
|||
#include "get-cursor-includes-1.h"
|
||||
#include "get-cursor-includes-1.h"
|
|
@ -0,0 +1,7 @@
|
|||
#include "get-cursor-includes-2.h"
|
||||
#include "get-cursor-includes-2.h"
|
||||
|
||||
// RUN: c-index-test -write-pch %t.h.pch -I%S/Inputs -Xclang -detailed-preprocessing-record %S/Inputs/get-cursor-includes-2.h
|
||||
// RUN: c-index-test -cursor-at=%S/Inputs/get-cursor-includes-2.h:1:5 -I%S/Inputs -include %t.h %s | FileCheck %s
|
||||
|
||||
// CHECK: inclusion directive=get-cursor-includes-1.h
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue