* [PATCH 1/2] kconfig: tests: remove randconfig test for choice in choice
@ 2020-04-24 5:49 Masahiro Yamada
2020-04-24 5:49 ` [PATCH 2/2] kconfig: allow only 'config', 'comment', and 'if' statements inside choice Masahiro Yamada
0 siblings, 1 reply; 2+ messages in thread
From: Masahiro Yamada @ 2020-04-24 5:49 UTC (permalink / raw)
To: linux-kbuild; +Cc: Ulf Magnusson, Masahiro Yamada, linux-kernel
Nesting choice statements does not make any sense.
Commit df8df5e4bc37 ("usb: get rid of 'choice' for legacy gadget
drivers") got rid of the only user.
I will make it a syntax error. Remove the test in advance.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---
.../kconfig/tests/rand_nested_choice/Kconfig | 35 -------------------
.../tests/rand_nested_choice/__init__.py | 17 ---------
.../tests/rand_nested_choice/expected_stdout0 | 2 --
.../tests/rand_nested_choice/expected_stdout1 | 4 ---
.../tests/rand_nested_choice/expected_stdout2 | 5 ---
5 files changed, 63 deletions(-)
delete mode 100644 scripts/kconfig/tests/rand_nested_choice/Kconfig
delete mode 100644 scripts/kconfig/tests/rand_nested_choice/__init__.py
delete mode 100644 scripts/kconfig/tests/rand_nested_choice/expected_stdout0
delete mode 100644 scripts/kconfig/tests/rand_nested_choice/expected_stdout1
delete mode 100644 scripts/kconfig/tests/rand_nested_choice/expected_stdout2
diff --git a/scripts/kconfig/tests/rand_nested_choice/Kconfig b/scripts/kconfig/tests/rand_nested_choice/Kconfig
deleted file mode 100644
index 8350de7f732b..000000000000
--- a/scripts/kconfig/tests/rand_nested_choice/Kconfig
+++ /dev/null
@@ -1,35 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0
-
-choice
- prompt "choice"
-
-config A
- bool "A"
-
-config B
- bool "B"
-
-if B
-choice
- prompt "sub choice"
-
-config C
- bool "C"
-
-config D
- bool "D"
-
-if D
-choice
- prompt "subsub choice"
-
-config E
- bool "E"
-
-endchoice
-endif # D
-
-endchoice
-endif # B
-
-endchoice
diff --git a/scripts/kconfig/tests/rand_nested_choice/__init__.py b/scripts/kconfig/tests/rand_nested_choice/__init__.py
deleted file mode 100644
index 9e4b2db53581..000000000000
--- a/scripts/kconfig/tests/rand_nested_choice/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0
-"""
-Set random values recursively in nested choices.
-
-Kconfig can create a choice-in-choice structure by using 'if' statement.
-randconfig should correctly set random choice values.
-
-Related Linux commit: 3b9a19e08960e5cdad5253998637653e592a3c29
-"""
-
-
-def test(conf):
- for i in range(20):
- assert conf.randconfig() == 0
- assert (conf.config_contains('expected_stdout0') or
- conf.config_contains('expected_stdout1') or
- conf.config_contains('expected_stdout2'))
diff --git a/scripts/kconfig/tests/rand_nested_choice/expected_stdout0 b/scripts/kconfig/tests/rand_nested_choice/expected_stdout0
deleted file mode 100644
index 05450f3d4eb5..000000000000
--- a/scripts/kconfig/tests/rand_nested_choice/expected_stdout0
+++ /dev/null
@@ -1,2 +0,0 @@
-CONFIG_A=y
-# CONFIG_B is not set
diff --git a/scripts/kconfig/tests/rand_nested_choice/expected_stdout1 b/scripts/kconfig/tests/rand_nested_choice/expected_stdout1
deleted file mode 100644
index 37ab29584157..000000000000
--- a/scripts/kconfig/tests/rand_nested_choice/expected_stdout1
+++ /dev/null
@@ -1,4 +0,0 @@
-# CONFIG_A is not set
-CONFIG_B=y
-CONFIG_C=y
-# CONFIG_D is not set
diff --git a/scripts/kconfig/tests/rand_nested_choice/expected_stdout2 b/scripts/kconfig/tests/rand_nested_choice/expected_stdout2
deleted file mode 100644
index 849ff47e9848..000000000000
--- a/scripts/kconfig/tests/rand_nested_choice/expected_stdout2
+++ /dev/null
@@ -1,5 +0,0 @@
-# CONFIG_A is not set
-CONFIG_B=y
-# CONFIG_C is not set
-CONFIG_D=y
-CONFIG_E=y
--
2.25.1
^ permalink raw reply related [flat|nested] 2+ messages in thread* [PATCH 2/2] kconfig: allow only 'config', 'comment', and 'if' statements inside choice
2020-04-24 5:49 [PATCH 1/2] kconfig: tests: remove randconfig test for choice in choice Masahiro Yamada
@ 2020-04-24 5:49 ` Masahiro Yamada
0 siblings, 0 replies; 2+ messages in thread
From: Masahiro Yamada @ 2020-04-24 5:49 UTC (permalink / raw)
To: linux-kbuild; +Cc: Ulf Magnusson, Masahiro Yamada, linux-kernel
The statement block surrounded by 'if' ... 'endif' is reduced into
if_stmt, which is accepted in the choice context. Therefore, you can
do anything within a choice block by wrapping 'if y' ... 'end'.
For example, you can create a menu inside a choice.
[Test Code]
---------------->8----------------
choice
prompt "choice"
config A
bool "A"
config B
bool "B"
if y
menu "strange menu"
config C
bool "C"
endmenu
endif
endchoice
---------------->8----------------
I want to make such a weird structure a syntax error.
In fact, the USB gadget Kconfig file used nested choice for no good
reason until commit df8df5e4bc37 ("usb: get rid of 'choice' for
legacy gadget drivers") killed it.
I think the 'source' statement inside choice is on the fence. It is
at least gramatically sensible as long as the included file contains
only bool/tristate config statements. However, it makes the code
unreadable, and in the end, people forget the fact that the file is
included from the choice block. Commit 10e5e6c24963 ("usb: gadget: move
choice ... endchoice to legacy/Kconfig") got rid of the only user.
Going forward, you can only use 'config', 'comment', and 'if' inside
choice blocks. This also recursively applies to 'if' blocks inside
choice blocks.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---
scripts/kconfig/parser.y | 30 ++++++++++++++++--------------
1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/scripts/kconfig/parser.y b/scripts/kconfig/parser.y
index 708b6c4b13ca..190f1117f35a 100644
--- a/scripts/kconfig/parser.y
+++ b/scripts/kconfig/parser.y
@@ -119,20 +119,24 @@ mainmenu_stmt: T_MAINMENU T_WORD_QUOTE T_EOL
stmt_list:
/* empty */
- | stmt_list common_stmt
+ | stmt_list assignment_stmt
| stmt_list choice_stmt
+ | stmt_list comment_stmt
+ | stmt_list config_stmt
+ | stmt_list if_stmt
| stmt_list menu_stmt
+ | stmt_list menuconfig_stmt
+ | stmt_list source_stmt
| stmt_list T_WORD error T_EOL { zconf_error("unknown statement \"%s\"", $2); }
| stmt_list error T_EOL { zconf_error("invalid statement"); }
;
-common_stmt:
- if_stmt
- | comment_stmt
- | config_stmt
- | menuconfig_stmt
- | source_stmt
- | assignment_stmt
+stmt_list_in_choice:
+ /* empty */
+ | stmt_list_in_choice comment_stmt
+ | stmt_list_in_choice config_stmt
+ | stmt_list_in_choice if_stmt_in_choice
+ | stmt_list_in_choice error T_EOL { zconf_error("invalid statement"); }
;
/* config/menuconfig entry */
@@ -254,7 +258,7 @@ choice_end: end
}
};
-choice_stmt: choice_entry choice_block choice_end
+choice_stmt: choice_entry stmt_list_in_choice choice_end
;
choice_option_list:
@@ -305,11 +309,6 @@ default:
| T_DEF_BOOL { $$ = S_BOOLEAN; }
| T_DEF_TRISTATE { $$ = S_TRISTATE; }
-choice_block:
- /* empty */
- | choice_block common_stmt
-;
-
/* if entry */
if_entry: T_IF expr T_EOL
@@ -331,6 +330,9 @@ if_end: end
if_stmt: if_entry stmt_list if_end
;
+if_stmt_in_choice: if_entry stmt_list_in_choice if_end
+;
+
/* menu entry */
menu: T_MENU T_WORD_QUOTE T_EOL
--
2.25.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-04-24 5:50 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-04-24 5:49 [PATCH 1/2] kconfig: tests: remove randconfig test for choice in choice Masahiro Yamada
2020-04-24 5:49 ` [PATCH 2/2] kconfig: allow only 'config', 'comment', and 'if' statements inside choice Masahiro Yamada
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox