[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