Workaround a really serious caching bug in SourceManager::isBeforeInTranslationUnit() where the

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.

llvm-svn: 103143
This commit is contained in:
Ted Kremenek 2010-05-06 00:22:25 +00:00
parent f3983652eb
commit 5b0773e201
3 changed files with 12 additions and 0 deletions

View 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".

View File

@ -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=

View File

@ -0,0 +1 @@
int foo();