[llvm] [TableGen] Check for EOF in prepSkipRegion to avoid preprocessor crash. (PR #208961)
Kevin Bravo via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 15 19:41:16 PDT 2026
https://github.com/kbrav updated https://github.com/llvm/llvm-project/pull/208961
>From 25451f378cb8dbdc8543b477e047a46f85c907c4 Mon Sep 17 00:00:00 2001
From: kbrav <kbravjr at gmail.com>
Date: Sat, 11 Jul 2026 18:21:13 -0400
Subject: [PATCH 1/2] [TableGen] Check for EOF in prepSkipRegion to avoid
preprocessor crash.
---
llvm/lib/TableGen/TGLexer.cpp | 3 ++-
llvm/test/TableGen/eof-after-endif.td | 5 +++++
2 files changed, 7 insertions(+), 1 deletion(-)
create mode 100644 llvm/test/TableGen/eof-after-endif.td
diff --git a/llvm/lib/TableGen/TGLexer.cpp b/llvm/lib/TableGen/TGLexer.cpp
index ac46054a74d9e..b63e807572040 100644
--- a/llvm/lib/TableGen/TGLexer.cpp
+++ b/llvm/lib/TableGen/TGLexer.cpp
@@ -913,8 +913,9 @@ bool TGLexer::prepSkipRegion(bool MustNeverBeFalse) {
do {
// Skip all symbols to the line end.
- while (*CurPtr != '\n')
+ while (CurPtr != CurBuf.end() && *CurPtr != '\n') {
++CurPtr;
+ }
// Find the first non-whitespace symbol in the next line(s).
if (!prepSkipLineBegin())
diff --git a/llvm/test/TableGen/eof-after-endif.td b/llvm/test/TableGen/eof-after-endif.td
new file mode 100644
index 0000000000000..a77ab9b18382f
--- /dev/null
+++ b/llvm/test/TableGen/eof-after-endif.td
@@ -0,0 +1,5 @@
+// Do not modify this file from a text editor.
+// It has no whitespace, newline, or carriage return after #endif.
+// RUN: not llvm-tblgen %s
+#ifdef FOO
+#endif
\ No newline at end of file
>From 3fa8b596aac9ef15e12c6bd8a732eb420655e888 Mon Sep 17 00:00:00 2001
From: kbrav <kbravjr at gmail.com>
Date: Wed, 15 Jul 2026 22:40:34 -0400
Subject: [PATCH 2/2] conform to coding standards, make test more clear
---
llvm/lib/TableGen/TGLexer.cpp | 3 +--
llvm/test/TableGen/eof-after-endif.td | 9 +++++++--
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/llvm/lib/TableGen/TGLexer.cpp b/llvm/lib/TableGen/TGLexer.cpp
index b63e807572040..238b1a35a85d3 100644
--- a/llvm/lib/TableGen/TGLexer.cpp
+++ b/llvm/lib/TableGen/TGLexer.cpp
@@ -913,9 +913,8 @@ bool TGLexer::prepSkipRegion(bool MustNeverBeFalse) {
do {
// Skip all symbols to the line end.
- while (CurPtr != CurBuf.end() && *CurPtr != '\n') {
+ while (CurPtr != CurBuf.end() && *CurPtr != '\n')
++CurPtr;
- }
// Find the first non-whitespace symbol in the next line(s).
if (!prepSkipLineBegin())
diff --git a/llvm/test/TableGen/eof-after-endif.td b/llvm/test/TableGen/eof-after-endif.td
index a77ab9b18382f..558a7422a5269 100644
--- a/llvm/test/TableGen/eof-after-endif.td
+++ b/llvm/test/TableGen/eof-after-endif.td
@@ -1,5 +1,10 @@
// Do not modify this file from a text editor.
// It has no whitespace, newline, or carriage return after #endif.
-// RUN: not llvm-tblgen %s
-#ifdef FOO
+// It tests that the lexer doesn't crash on EOF at the end of a preprocessor
+// directive.
+// RUN: not llvm-tblgen %s 2>&1 | FileCheck %s
+// CHECK: :[[@LINE+4]]:7: error: reached EOF without matching #endif
+// CHECK: :[[@LINE+2]]:8: error: the latest preprocessor control is here
+// CHECK: :[[@LINE+2]]:7: error: Unexpected token at top level
+#ifdef FOO
#endif
\ No newline at end of file
More information about the llvm-commits
mailing list