• Yann E. MORIN's avatar
    kconfig: loop as long as we changed some symbols in randconfig · 3b9a19e0
    Yann E. MORIN authored
    Because of choice-in-a-choice constructs, it can happen that not all
    symbols are assigned a value during randconfig, leading in rare cases
    to this situation:
    
        ---8<--- choice-in-choice.in
        choice
            bool "A/B/C"
        config A
            bool "A"
    
        config B
            bool "B"
        if B
        choice
            bool "E/F"
        config E
            bool "E"
        config F
            bool "F"
        endchoice
        endif # B
    
        config C
            bool "C"
        endchoice
        ---8<---
    
        $ ./scripts/kconfig/conf --randconfig choice-in-choice.in
        [--SNIP--]
        $ ./scripts/kconfig/conf --silentoldconfig choice-in-choice.in </dev/null
        [--SNIP--]
        A/B/C
          1. A (A)
        > 2. B (B)
          3. C (C)
        choice[1-3]: 2
          E/F
          > 1. E (E) (NEW)
            2. F (F) (NEW)
          choice[1-2]: aborted!
    
        Console input/output is redirected. Run 'make oldconfig' to update
        configuration.
    
    Fix this by looping in randconfig for as long as some symbol gets assigned
    a value.
    
    Note: this was spotted with the USB EHCI Debug Device Gadget (USB_G_DBGP),
    which uses this choice-in-a-choice construct, and exhibits this problem.
    The example above is just a stripped-down minimalist test-case.
    Signed-off-by: default avatar"Yann E. MORIN" <yann.morin.1998@free.fr>
    3b9a19e0
confdata.c 25.3 KB