forked from OSchip/llvm-project
Fix the location of the fixit for -Wnewline-eof.
It turns out SourceManager treating the "one-past-the-end" location as invalid, but then failing to set the invalid flag properly. llvm-svn: 158699
This commit is contained in:
parent
1cc27e44a4
commit
8d63d5b8e6
|
@ -1015,9 +1015,10 @@ unsigned SourceManager::getColumnNumber(FileID FID, unsigned FilePos,
|
|||
if (MyInvalid)
|
||||
return 1;
|
||||
|
||||
if (FilePos >= MemBuf->getBufferSize()) {
|
||||
// It is okay to request a position just past the end of the buffer.
|
||||
if (FilePos > MemBuf->getBufferSize()) {
|
||||
if (Invalid)
|
||||
*Invalid = MyInvalid;
|
||||
*Invalid = true;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -Wnewline-eof -verify %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -Wnewline-eof %s 2>&1 | FileCheck %s
|
||||
// rdar://9133072
|
||||
|
||||
// Make sure the diagnostic shows up properly at the end of the last line.
|
||||
// CHECK: newline-eof.c:9:63
|
||||
|
||||
// The following line isn't terminated, don't fix it.
|
||||
void foo() {} // expected-warning{{no newline at end of file}}
|
|
@ -107,6 +107,54 @@ TEST_F(SourceManagerTest, isBeforeInTranslationUnit) {
|
|||
EXPECT_TRUE(SourceMgr.isBeforeInTranslationUnit(idLoc, macroExpEndLoc));
|
||||
}
|
||||
|
||||
TEST_F(SourceManagerTest, getColumnNumber) {
|
||||
const char *Source =
|
||||
"int x;\n"
|
||||
"int y;";
|
||||
|
||||
MemoryBuffer *Buf = MemoryBuffer::getMemBuffer(Source);
|
||||
FileID MainFileID = SourceMgr.createMainFileIDForMemBuffer(Buf);
|
||||
|
||||
bool Invalid;
|
||||
|
||||
Invalid = false;
|
||||
EXPECT_EQ(1U, SourceMgr.getColumnNumber(MainFileID, 0, &Invalid));
|
||||
EXPECT_TRUE(!Invalid);
|
||||
|
||||
Invalid = false;
|
||||
EXPECT_EQ(5U, SourceMgr.getColumnNumber(MainFileID, 4, &Invalid));
|
||||
EXPECT_TRUE(!Invalid);
|
||||
|
||||
Invalid = false;
|
||||
EXPECT_EQ(1U, SourceMgr.getColumnNumber(MainFileID, 7, &Invalid));
|
||||
EXPECT_TRUE(!Invalid);
|
||||
|
||||
Invalid = false;
|
||||
EXPECT_EQ(5U, SourceMgr.getColumnNumber(MainFileID, 11, &Invalid));
|
||||
EXPECT_TRUE(!Invalid);
|
||||
|
||||
Invalid = false;
|
||||
EXPECT_EQ(7U, SourceMgr.getColumnNumber(MainFileID, strlen(Source),
|
||||
&Invalid));
|
||||
EXPECT_TRUE(!Invalid);
|
||||
|
||||
Invalid = false;
|
||||
SourceMgr.getColumnNumber(MainFileID, strlen(Source)+1, &Invalid);
|
||||
EXPECT_TRUE(Invalid);
|
||||
|
||||
// Test invalid files
|
||||
Invalid = false;
|
||||
SourceMgr.getColumnNumber(FileID(), 0, &Invalid);
|
||||
EXPECT_TRUE(Invalid);
|
||||
|
||||
Invalid = false;
|
||||
SourceMgr.getColumnNumber(FileID(), 1, &Invalid);
|
||||
EXPECT_TRUE(Invalid);
|
||||
|
||||
// Test with no invalid flag.
|
||||
EXPECT_EQ(1U, SourceMgr.getColumnNumber(MainFileID, 0, NULL));
|
||||
}
|
||||
|
||||
#if defined(LLVM_ON_UNIX)
|
||||
|
||||
TEST_F(SourceManagerTest, getMacroArgExpandedLocation) {
|
||||
|
|
Loading…
Reference in New Issue