• Masahiro Yamada's avatar
    kconfig: report recursive dependency involving 'imply' · 5e8c5299
    Masahiro Yamada authored
    Currently, Kconfig does not complain about the recursive dependency
    where 'imply' keywords are involved.
    
    [Test Code]
    
      config A
              bool "a"
    
      config B
              bool "b"
              imply A
              depends on A
    
    In the code above, Kconfig cannot calculate the symbol values correctly
    due to the circular dependency.  For example, allyesconfig followed by
    syncconfig results in an odd behavior because CONFIG_B becomes visible
    in syncconfig.
    
      $ make allyesconfig
      scripts/kconfig/conf  --allyesconfig Kconfig
      #
      # configuration written to .config
      #
      $ cat .config
      #
      # Automatically generated file; DO NOT EDIT.
      # Main menu
      #
      CONFIG_A=y
      $ make syncconfig
      scripts/kconfig/conf  --syncconfig Kconfig
      *
      * Restart config...
      *
      *
      * Main menu
      *
      a (A) [Y/n/?] y
        b (B) [N/y/?] (NEW)
    
    To detect this correctly, sym_check_expr_deps() should recurse to
    not only sym->rev_dep.expr but also sym->implied.expr .
    
    At this moment, sym_check_print_recursive() cannot distinguish
    'select' and 'imply' since it does not know the precise context
    where the recursive dependency has been hit.  This will be solved
    by the next commit.
    
    In fact, even the document and the unit-test are confused.  Using
    'imply' does not solve recursive dependency since 'imply' addresses
    the unmet direct dependency, which 'select' could cause.
    Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    Tested-by: default avatarDirk Gouders <dirk@gouders.net>
    5e8c5299
symbol.c 28.4 KB