Revert "[Lexer] NFC: Fix an off-by-one bug in getAsCharRange()."

This reverts commit r357823.

Was breaking clang-tidy!

Differential Revision: https://reviews.llvm.org/D59977

llvm-svn: 357827
This commit is contained in:
Artem Dergachev 2019-04-05 22:11:28 +00:00
parent cb70fe1c69
commit 4a9007cde7
3 changed files with 2 additions and 25 deletions

View File

@ -127,11 +127,7 @@ inline void EmitRange(raw_ostream &o, const SourceManager &SM,
assert(R.isCharRange() && "cannot handle a token range");
Indent(o, indent) << "<array>\n";
EmitLocation(o, SM, R.getBegin(), FM, indent + 1);
// The ".getLocWithOffset(-1)" emulates the behavior of an off-by-one bug
// in Lexer that is already fixed. It is here for backwards compatibility
// even though it is incorrect.
EmitLocation(o, SM, R.getEnd().getLocWithOffset(-1), FM, indent + 1);
EmitLocation(o, SM, R.getEnd(), FM, indent + 1);
Indent(o, indent) << "</array>\n";
}

View File

@ -382,7 +382,7 @@ public:
SourceLocation End = getLocForEndOfToken(Range.getEnd(), 0, SM, LangOpts);
return End.isInvalid() ? CharSourceRange()
: CharSourceRange::getCharRange(
Range.getBegin(), End);
Range.getBegin(), End.getLocWithOffset(-1));
}
static CharSourceRange getAsCharRange(CharSourceRange Range,
const SourceManager &SM,

View File

@ -513,23 +513,4 @@ TEST_F(LexerTest, StringizingRasString) {
EXPECT_EQ(String6, R"(a\\\n\n\n \\\\b)");
}
TEST_F(LexerTest, CharRangeOffByOne) {
std::vector<Token> toks = Lex(R"(#define MOO 1
void foo() { MOO; })");
const Token &moo = toks[5];
EXPECT_EQ(getSourceText(moo, moo), "MOO");
SourceRange R{moo.getLocation(), moo.getLocation()};
EXPECT_TRUE(
Lexer::isAtStartOfMacroExpansion(R.getBegin(), SourceMgr, LangOpts));
EXPECT_TRUE(
Lexer::isAtEndOfMacroExpansion(R.getEnd(), SourceMgr, LangOpts));
CharSourceRange CR = Lexer::getAsCharRange(R, SourceMgr, LangOpts);
EXPECT_EQ(Lexer::getSourceText(CR, SourceMgr, LangOpts), "MOO"); // Was "MO".
}
} // anonymous namespace