summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorUlf Magnusson <ulfalizer@gmail.com>2018-11-02 02:35:49 +0100
committerUlf Magnusson <ulfalizer@gmail.com>2018-11-02 03:52:46 +0100
commit0e6cd82908f5c649e15e6a63ad77a94f627449d2 (patch)
treec0d9b6afa0a4a46f0a70ec37d9acabfc4c8e0617 /tests
parentb0e4a4fda7d623284ac1949d6797b9f0a1995d88 (diff)
Fix removal of multiple consecutive 'if' nodes
Despite 'if' nodes being flattened before 'if' removal, consecutive 'if' nodes can still show up for code like the following: ... if X endif if X endif ... _remove_ifs() failed to remove the second 'if' node, leading to a crash e.g. when turning on show-all mode in the menuconfig in a menu with such code (due to the unexpected 'if' node). Stuff like the above could potentially result from 'osource's with no matches, though I just spotted the error while looking over the code. Fix the 'if' removal logic to properly handle consecutive 'if' nodes.
Diffstat (limited to 'tests')
-rw-r--r--tests/Kifremoval99
1 files changed, 99 insertions, 0 deletions
diff --git a/tests/Kifremoval b/tests/Kifremoval
new file mode 100644
index 0000000..f94472c
--- /dev/null
+++ b/tests/Kifremoval
@@ -0,0 +1,99 @@
+# Test some tricky cases that give consecutive 'if' nodes even after
+# flattening. Simple cases are exercised a ton elsewhere.
+
+if X
+endif
+if X
+endif
+
+config A
+
+if X
+endif
+if X
+endif
+
+config B
+
+if X
+endif
+if X
+endif
+if X
+endif
+
+config C
+
+if X
+ if X
+ if X
+ endif
+ if X
+ endif
+ endif
+ if X
+ if X
+ endif
+ if X
+ endif
+ endif
+ config D
+endif
+if X
+endif
+
+menu "E"
+ if X
+ if X
+ endif
+ endif
+ if X
+ if X
+ endif
+ endif
+endmenu
+
+menu "F"
+ if X
+ endif
+ if X
+ endif
+ if X
+ if X
+ endif
+ if X
+ endif
+ menu "G"
+ endmenu
+ endif
+endmenu
+
+choice H
+ if X
+ if X
+ endif
+ endif
+ if X
+ if X
+ endif
+ endif
+endchoice
+
+choice I
+ if X
+ endif
+ if X
+ endif
+ if X
+ if X
+ endif
+ if X
+ endif
+ config J
+ endif
+endchoice
+
+if X
+endif
+if X
+endif