[PATCH] D159236: [TableGen] Fix incorrect handling of nested `#ifndef` directives
Min-Yih Hsu via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 7 12:58:24 PDT 2023
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGa09f09c618e9: [TableGen] Fix incorrect handling of nested `#ifndef` directives (authored by myhsu).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D159236/new/
https://reviews.llvm.org/D159236
Files:
llvm/lib/TableGen/TGLexer.cpp
llvm/test/TableGen/nested_ifdef.inc
llvm/test/TableGen/nested_ifdef2.inc
llvm/test/TableGen/nested_ifdef_main.td
Index: llvm/test/TableGen/nested_ifdef_main.td
===================================================================
--- /dev/null
+++ llvm/test/TableGen/nested_ifdef_main.td
@@ -0,0 +1,11 @@
+// RUN: llvm-tblgen -I %p %s | FileCheck %s
+
+include "nested_ifdef.inc"
+include "nested_ifdef2.inc"
+
+// CHECK: def bar
+// CHECK: def foo
+// CHECK: def haha
+// CHECK: def zoo
+
+def zoo;
Index: llvm/test/TableGen/nested_ifdef2.inc
===================================================================
--- /dev/null
+++ llvm/test/TableGen/nested_ifdef2.inc
@@ -0,0 +1,8 @@
+#ifndef NESTED_IFDEF2
+#define NESTED_IFDEF2
+
+include "nested_ifdef.inc"
+
+def bar;
+
+#endif
Index: llvm/test/TableGen/nested_ifdef.inc
===================================================================
--- /dev/null
+++ llvm/test/TableGen/nested_ifdef.inc
@@ -0,0 +1,10 @@
+#ifndef NESTED_IFDEF
+#define NESTED_IFDEF
+
+def foo;
+
+#ifndef HAHA
+def haha;
+#endif
+
+#endif
Index: llvm/lib/TableGen/TGLexer.cpp
===================================================================
--- llvm/lib/TableGen/TGLexer.cpp
+++ llvm/lib/TableGen/TGLexer.cpp
@@ -723,16 +723,15 @@
bool MacroIsDefined = DefinedMacros.count(MacroName) != 0;
- // Canonicalize ifndef to ifdef equivalent
- if (Kind == tgtok::Ifndef) {
+ // Canonicalize ifndef's MacroIsDefined to its ifdef equivalent.
+ if (Kind == tgtok::Ifndef)
MacroIsDefined = !MacroIsDefined;
- Kind = tgtok::Ifdef;
- }
// Regardless of whether we are processing tokens or not,
// we put the #ifdef control on stack.
+ // Note that MacroIsDefined has been canonicalized against ifdef.
PrepIncludeStack.back()->push_back(
- {Kind, MacroIsDefined, SMLoc::getFromPointer(TokStart)});
+ {tgtok::Ifdef, MacroIsDefined, SMLoc::getFromPointer(TokStart)});
if (!prepSkipDirectiveEnd())
return ReturnError(CurPtr, "Only comments are supported after " +
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D159236.556198.patch
Type: text/x-patch
Size: 1944 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230907/57567fe7/attachment.bin>
More information about the llvm-commits
mailing list