History

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"

Masahiro Yamada committed 2 years ago

Commit 1a7d0ea1 parent d5338281 file · +1 −1Browse files

Unified · Split

scripts/kconfig/symbol.c+1−1
@@ -1111,7 +1111,7 @@ static void sym_check_print_recursive(struct symbol *last_sym) · 1110 unmodified lines
11111111 menu->filename, menu->lineno,
11121112 sym->name ? sym->name : "<choice>",
11131113 next_sym->name ? next_sym->name : "<choice>");
1114− } else if (sym_is_choice_value(sym)) {
1114+ } else if (sym_is_choice(next_sym)) {
11151115 fprintf(stderr, "%s:%d:\tsymbol %s is part of choice %s\n",
11161116 menu->filename, menu->lineno,
11171117 sym->name ? sym->name : "<choice>",