[llvm-branch-commits] [cfe-branch] r123632 - in /cfe/branches/Apple/whitney: 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

Daniel Dunbar daniel at zuster.org
Mon Jan 17 07:44:22 PST 2011


Author: ddunbar
Date: Mon Jan 17 09:44:22 2011
New Revision: 123632

URL: http://llvm.org/viewvc/llvm-project?rev=123632&view=rev
Log:
Merge r122350:
--
Author: Douglas Gregor <dgregor at apple.com>
Date:   Tue Dec 21 19:07:48 2010 +0000

    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/branches/Apple/whitney/test/Index/Inputs/get-cursor-includes-1.h
    cfe/branches/Apple/whitney/test/Index/Inputs/get-cursor-includes-2.h
    cfe/branches/Apple/whitney/test/Index/get-cursor-includes.c
Modified:
    cfe/branches/Apple/whitney/tools/libclang/CIndex.cpp

Added: cfe/branches/Apple/whitney/test/Index/Inputs/get-cursor-includes-1.h
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/Apple/whitney/test/Index/Inputs/get-cursor-includes-1.h?rev=123632&view=auto
==============================================================================
--- cfe/branches/Apple/whitney/test/Index/Inputs/get-cursor-includes-1.h (added)
+++ cfe/branches/Apple/whitney/test/Index/Inputs/get-cursor-includes-1.h Mon Jan 17 09:44:22 2011
@@ -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/branches/Apple/whitney/test/Index/Inputs/get-cursor-includes-2.h
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/Apple/whitney/test/Index/Inputs/get-cursor-includes-2.h?rev=123632&view=auto
==============================================================================
--- cfe/branches/Apple/whitney/test/Index/Inputs/get-cursor-includes-2.h (added)
+++ cfe/branches/Apple/whitney/test/Index/Inputs/get-cursor-includes-2.h Mon Jan 17 09:44:22 2011
@@ -0,0 +1,2 @@
+#include "get-cursor-includes-1.h"
+#include "get-cursor-includes-1.h"

Added: cfe/branches/Apple/whitney/test/Index/get-cursor-includes.c
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/Apple/whitney/test/Index/get-cursor-includes.c?rev=123632&view=auto
==============================================================================
--- cfe/branches/Apple/whitney/test/Index/get-cursor-includes.c (added)
+++ cfe/branches/Apple/whitney/test/Index/get-cursor-includes.c Mon Jan 17 09:44:22 2011
@@ -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/branches/Apple/whitney/tools/libclang/CIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/Apple/whitney/tools/libclang/CIndex.cpp?rev=123632&r1=123631&r2=123632&view=diff
==============================================================================
--- cfe/branches/Apple/whitney/tools/libclang/CIndex.cpp (original)
+++ cfe/branches/Apple/whitney/tools/libclang/CIndex.cpp Mon Jan 17 09:44:22 2011
@@ -408,7 +408,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 llvm-branch-commits mailing list