kconfig: improve error message for dependency between choice members
A choice member must not depend on another member within the same choice block. Kconfig detects this, but the error message is not sensible. [Test Code] choice prompt "choose" config A bool "A" depends on B config B bool "B" endchoice [Result] Kconfig:1:error: recursive dependency detected! Kconfig:1: choice <choice> contains symbol A Kconfig:4: symbol A is part of choice B Kconfig:8: symbol B is part of choice <choice> For a resolution refer to Documentation/kbuild/kconfig-language.rst subsection "Kconfig recursive dependency limitations" The phrase "part of choice B" is weird because B is not a choice block, but a choice member. To determine whether the current symbol is a part of a choice block, sym_is_choice(next_sym) must be checked. This commit improves the error message to: Kconfig:1:error: recursive dependency detected! Kconfig:1: choice <choice> contains symbol A Kconfig:4: symbol A symbol is visible depending on B Kconfig:8: symbol B is part of choice <choice> For a resolution refer to Documentation/kbuild/kconfig-language.rst subsection "Kconfig recursive dependency limitations" Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
This commit is contained in:
parent
d533828ef3
commit
1a7d0ea83e
@ -1111,7 +1111,7 @@ static void sym_check_print_recursive(struct symbol *last_sym)
|
|||||||
menu->filename, menu->lineno,
|
menu->filename, menu->lineno,
|
||||||
sym->name ? sym->name : "<choice>",
|
sym->name ? sym->name : "<choice>",
|
||||||
next_sym->name ? next_sym->name : "<choice>");
|
next_sym->name ? next_sym->name : "<choice>");
|
||||||
} else if (sym_is_choice_value(sym)) {
|
} else if (sym_is_choice(next_sym)) {
|
||||||
fprintf(stderr, "%s:%d:\tsymbol %s is part of choice %s\n",
|
fprintf(stderr, "%s:%d:\tsymbol %s is part of choice %s\n",
|
||||||
menu->filename, menu->lineno,
|
menu->filename, menu->lineno,
|
||||||
sym->name ? sym->name : "<choice>",
|
sym->name ? sym->name : "<choice>",
|
||||||
|
Loading…
Reference in New Issue
Block a user