[cfe-commits] r158699 - in /cfe/trunk: lib/Basic/SourceManager.cpp test/Lexer/newline-eof.c unittests/Basic/SourceManagerTest.cpp
Jordan Rose
jordan_rose at apple.com
Mon Jun 18 20:09:38 PDT 2012
Author: jrose
Date: Mon Jun 18 22:09:38 2012
New Revision: 158699
URL: http://llvm.org/viewvc/llvm-project?rev=158699&view=rev
Log:
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.
Modified:
cfe/trunk/lib/Basic/SourceManager.cpp
cfe/trunk/test/Lexer/newline-eof.c
cfe/trunk/unittests/Basic/SourceManagerTest.cpp
Modified: cfe/trunk/lib/Basic/SourceManager.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/SourceManager.cpp?rev=158699&r1=158698&r2=158699&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/SourceManager.cpp (original)
+++ cfe/trunk/lib/Basic/SourceManager.cpp Mon Jun 18 22:09:38 2012
@@ -1015,9 +1015,10 @@
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;
}
Modified: cfe/trunk/test/Lexer/newline-eof.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/newline-eof.c?rev=158699&r1=158698&r2=158699&view=diff
==============================================================================
--- cfe/trunk/test/Lexer/newline-eof.c (original)
+++ cfe/trunk/test/Lexer/newline-eof.c Mon Jun 18 22:09:38 2012
@@ -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}}
\ No newline at end of file
Modified: cfe/trunk/unittests/Basic/SourceManagerTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Basic/SourceManagerTest.cpp?rev=158699&r1=158698&r2=158699&view=diff
==============================================================================
--- cfe/trunk/unittests/Basic/SourceManagerTest.cpp (original)
+++ cfe/trunk/unittests/Basic/SourceManagerTest.cpp Mon Jun 18 22:09:38 2012
@@ -107,6 +107,54 @@
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) {
More information about the cfe-commits
mailing list