• Masahiro Yamada's avatar
    kconfig: improve error message for dependency between choice members · 1a7d0ea8
    Masahiro Yamada authored
    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: default avatarMasahiro Yamada <masahiroy@kernel.org>
    1a7d0ea8
symbol.c 28.9 KB