• Masahiro Yamada's avatar
    kconfig: call expr_eliminate_yn() at least once in expr_eliminate_dups() · 8bfd6f09
    Masahiro Yamada authored
    Kconfig simplifies expressions, but redundant '&&' and '||' operators
    involving constant symbols 'y' and 'n' are sometimes trimmed and
    sometimes not.
    
    [Test Code]
    
        config DEP
                def_bool y
    
        config A
                bool "A"
                depends on DEP && y
    
        config B
                bool "B"
                depends on DEP && y && y
    
    [Result]
    
        $ make helpnewconfig
          [ snip ]
        -----
    
        There is no help available for this option.
        Symbol: A [=n]
        Type  : bool
        Defined at Kconfig:4
          Prompt: A
          Depends on: DEP [=y] && y [=y]
          Location:
            -> A (A [=n])
    
        -----
        -----
    
        There is no help available for this option.
        Symbol: B [=n]
        Type  : bool
        Defined at Kconfig:8
          Prompt: B
          Depends on: DEP [=y]
          Location:
            -> B (B [=n])
    
        -----
    
    The dependency for A, 'DEP && y', remains as-is, while that for B,
    'DEP && y && y', has been reduced to 'DEP'.
    
    Currently, expr_eliminate_dups() calls expr_eliminate_yn() only when
    trans_count != 0, in other words, only when expr_eliminate_dups1() has
    trimmed at least one leaf. It fails to trim a single '&& y', etc.
    
    To fix this inconsistent behavior, expr_eliminate_yn() should be called
    at least once even if no leaf has been trimmed.
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    8bfd6f09
expr.c 29.2 KB