[cfe-commits] r122350 - in /cfe/trunk: test/Index/Inputs/get-cursor-includes-1.h test/Index/Inputs/get-cursor-includes-2.h test/Index/get-cursor-includes.c tools/libclang/CIndex.cpp
Douglas Gregor
dgregor at apple.com
Tue Dec 21 11:07:48 PST 2010
Author: dgregor
Date: Tue Dec 21 13:07:48 2010
New Revision: 122350
URL: http://llvm.org/viewvc/llvm-project?rev=122350&view=rev
Log:
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>.
Added:
cfe/trunk/test/Index/Inputs/get-cursor-includes-1.h
cfe/trunk/test/Index/Inputs/get-cursor-includes-2.h
cfe/trunk/test/Index/get-cursor-includes.c
Modified:
cfe/trunk/tools/libclang/CIndex.cpp
Added: cfe/trunk/test/Index/Inputs/get-cursor-includes-1.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/Inputs/get-cursor-includes-1.h?rev=122350&view=auto
==============================================================================
--- cfe/trunk/test/Index/Inputs/get-cursor-includes-1.h (added)
+++ cfe/trunk/test/Index/Inputs/get-cursor-includes-1.h Tue Dec 21 13:07:48 2010
@@ -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
Added: cfe/trunk/test/Index/Inputs/get-cursor-includes-2.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/Inputs/get-cursor-includes-2.h?rev=122350&view=auto
==============================================================================
--- cfe/trunk/test/Index/Inputs/get-cursor-includes-2.h (added)
+++ cfe/trunk/test/Index/Inputs/get-cursor-includes-2.h Tue Dec 21 13:07:48 2010
@@ -0,0 +1,2 @@
+#include "get-cursor-includes-1.h"
+#include "get-cursor-includes-1.h"
Added: cfe/trunk/test/Index/get-cursor-includes.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/get-cursor-includes.c?rev=122350&view=auto
==============================================================================
--- cfe/trunk/test/Index/get-cursor-includes.c (added)
+++ cfe/trunk/test/Index/get-cursor-includes.c Tue Dec 21 13:07:48 2010
@@ -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
Modified: cfe/trunk/tools/libclang/CIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=122350&r1=122349&r2=122350&view=diff
==============================================================================
--- cfe/trunk/tools/libclang/CIndex.cpp (original)
+++ cfe/trunk/tools/libclang/CIndex.cpp Tue Dec 21 13:07:48 2010
@@ -410,7 +410,20 @@
= *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) {
More information about the cfe-commits
mailing list