]> granicus.if.org Git - clang/commitdiff
Workaround a really serious caching bug in SourceManager::isBeforeInTranslationUnit...
authorTed Kremenek <kremenek@apple.com>
Thu, 6 May 2010 00:22:25 +0000 (00:22 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 6 May 2010 00:22:25 +0000 (00:22 +0000)
method will sometimes return different results for the same input SourceLocations.  I haven't
unraveled this method completely yet, so this truly is a workaround until a better fix comes
along.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103143 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/SourceManager.cpp
test/Index/annotate-tokens-include.c [new file with mode: 0644]
test/Index/annotate-tokens-include.h [new file with mode: 0644]

index 3ecab1d8c16fceb94e06c2c769ffa922c052a259..3fb52a100b97e32c69fe324352f44dd81cecaf06 100644 (file)
@@ -1170,15 +1170,20 @@ bool SourceManager::isBeforeInTranslationUnit(SourceLocation LHS,
   if (LOffs.first == ROffs.first)
     return LOffs.second < ROffs.second;
 
+#if 0
   // If we are comparing a source location with multiple locations in the same
   // file, we get a big win by caching the result.
 
+  // FIXME: This caching is wrong, but I don't know enough about this code
+  // to immediately fix it.  There are cases where passing the same input
+  // values to this method causes it to return different results.
   if (LastLFIDForBeforeTUCheck == LOffs.first &&
       LastRFIDForBeforeTUCheck == ROffs.first)
     return LastResForBeforeTUCheck;
 
   LastLFIDForBeforeTUCheck = LOffs.first;
   LastRFIDForBeforeTUCheck = ROffs.first;
+#endif
 
   // "Traverse" the include/instantiation stacks of both locations and try to
   // find a common "ancestor".
diff --git a/test/Index/annotate-tokens-include.c b/test/Index/annotate-tokens-include.c
new file mode 100644 (file)
index 0000000..3c3c43b
--- /dev/null
@@ -0,0 +1,6 @@
+#include "annotate-tokens-include.h"
+
+// RUN: c-index-test -test-annotate-tokens=%s:1:1:2:1 %s | FileCheck %s
+// CHECK: Identifier: "include" [1:2 - 1:9] preprocessing directive=
+// CHECK: Literal: ""annotate-tokens-include.h"" [1:10 - 1:37] preprocessing directive=
+
diff --git a/test/Index/annotate-tokens-include.h b/test/Index/annotate-tokens-include.h
new file mode 100644 (file)
index 0000000..5d5f8f0
--- /dev/null
@@ -0,0 +1 @@
+int foo();