* [PATCH] Documentation: warn against using int, hex, string options as expressions in Kconfig
@ 2026-07-30 14:01 Julian Braha
2026-07-31 0:25 ` Nathan Chancellor
2026-07-31 0:32 ` Randy Dunlap
0 siblings, 2 replies; 5+ messages in thread
From: Julian Braha @ 2026-07-30 14:01 UTC (permalink / raw)
To: nathan, nsc, corbet, skhan
Cc: jani.nikula, arnd, stefan.hengelein, linux-kbuild, linux-kernel,
linux-doc, nico, officialnaumansabir, rdunlap, vegard.nossum,
kees, tj, Julian Braha
I've been working on type checking Kconfig, and found some instances of
dead code due to conditions that always evaluate to false.
For example:
config FOO
int
config BAR
bool
default 'y' if FOO
This 'if FOO' will always be false, regardless of FOO's value (even when
FOO=1). The same goes for strings and hex.
See also this related patch:
https://lore.kernel.org/all/20260729210546.394392-1-julianbraha@gmail.com/
Let's warn users against this usage.
Signed-off-by: Julian Braha <julianbraha@gmail.com>
---
Documentation/kbuild/kconfig-language.rst | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/Documentation/kbuild/kconfig-language.rst b/Documentation/kbuild/kconfig-language.rst
index ab2822d7ca1c..aee84b294a56 100644
--- a/Documentation/kbuild/kconfig-language.rst
+++ b/Documentation/kbuild/kconfig-language.rst
@@ -320,6 +320,17 @@ An expression can have a value of 'n', 'm' or 'y' (or 0, 1, 2
respectively for calculations). A menu entry becomes visible when its
expression evaluates to 'm' or 'y'.
+Note that options of int, hex, or string type should not be used directly
+as expressions; these will always evaluate to 'n'. Instead, to check if
+one of these options is in use, consider using one of these heuristics::
+
+ <symbol> != 0
+ <symbol> != 0x0
+ <symbol> != ""
+
+because int, hex, and string options will take these values of '0', '0x0',
+and the empty string, respectively, when the dependencies are unmet.
+
There are two types of symbols: constant and non-constant symbols.
Non-constant symbols are the most common ones and are defined with the
'config' statement. Non-constant symbols consist entirely of alphanumeric
--
2.55.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] Documentation: warn against using int, hex, string options as expressions in Kconfig
2026-07-30 14:01 [PATCH] Documentation: warn against using int, hex, string options as expressions in Kconfig Julian Braha
@ 2026-07-31 0:25 ` Nathan Chancellor
2026-07-31 9:43 ` Julian Braha
2026-07-31 0:32 ` Randy Dunlap
1 sibling, 1 reply; 5+ messages in thread
From: Nathan Chancellor @ 2026-07-31 0:25 UTC (permalink / raw)
To: Julian Braha
Cc: nathan, nsc, corbet, skhan, jani.nikula, arnd, stefan.hengelein,
linux-kbuild, linux-kernel, linux-doc, nico, officialnaumansabir,
rdunlap, vegard.nossum, kees, tj
> I've been working on type checking Kconfig, and found some instances of
> dead code due to conditions that always evaluate to false.
>
> For example:
>
> config FOO
> int
>
> config BAR
> bool
> default 'y' if FOO
Drop this quoting of y for clarity?
> This 'if FOO' will always be false, regardless of FOO's value (even when
> FOO=1). The same goes for strings and hex.
Hmmm, it might be kind of nice to either:
1. Warn about this in Kconfig directly (if possible)
2. Support this usage in Kconfig how one would intuitively expect from
either C or Python where symbols with values of 0, 0x0, and '' would
be treated as false and every other value set as true.
> See also this related patch:
> https://lore.kernel.org/all/20260729210546.394392-1-julianbraha@gmail.com/
>
> Let's warn users against this usage.
That said, until either of those potentially happen, this patch seems
fine.
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
--
Cheers,
Nathan
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Documentation: warn against using int, hex, string options as expressions in Kconfig
2026-07-30 14:01 [PATCH] Documentation: warn against using int, hex, string options as expressions in Kconfig Julian Braha
2026-07-31 0:25 ` Nathan Chancellor
@ 2026-07-31 0:32 ` Randy Dunlap
1 sibling, 0 replies; 5+ messages in thread
From: Randy Dunlap @ 2026-07-31 0:32 UTC (permalink / raw)
To: Julian Braha, nathan, nsc, corbet, skhan
Cc: jani.nikula, arnd, stefan.hengelein, linux-kbuild, linux-kernel,
linux-doc, nico, officialnaumansabir, vegard.nossum, kees, tj
Hi,
I haven't had time to really look at this yet, but...
On 7/30/26 7:01 AM, Julian Braha wrote:
> I've been working on type checking Kconfig, and found some instances of
> dead code due to conditions that always evaluate to false.
>
> For example:
>
> config FOO
> int
>
> config BAR
> bool
> default 'y' if FOO
>
> This 'if FOO' will always be false, regardless of FOO's value (even when
> FOO=1). The same goes for strings and hex.
Does it help to say
default y if FOO > 0
or
default y if FOO != 0
Oh, I think that's what you suggested below. :)
Sorry, I just read that part.
This is unfortunate IMO but yes, let's at least document it.
Thanks.
> See also this related patch:
> https://lore.kernel.org/all/20260729210546.394392-1-julianbraha@gmail.com/
>
> Let's warn users against this usage.
>
> Signed-off-by: Julian Braha <julianbraha@gmail.com>
> ---
> Documentation/kbuild/kconfig-language.rst | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/Documentation/kbuild/kconfig-language.rst b/Documentation/kbuild/kconfig-language.rst
> index ab2822d7ca1c..aee84b294a56 100644
> --- a/Documentation/kbuild/kconfig-language.rst
> +++ b/Documentation/kbuild/kconfig-language.rst
> @@ -320,6 +320,17 @@ An expression can have a value of 'n', 'm' or 'y' (or 0, 1, 2
> respectively for calculations). A menu entry becomes visible when its
> expression evaluates to 'm' or 'y'.
>
> +Note that options of int, hex, or string type should not be used directly
> +as expressions; these will always evaluate to 'n'. Instead, to check if
> +one of these options is in use, consider using one of these heuristics::
> +
> + <symbol> != 0
> + <symbol> != 0x0
> + <symbol> != ""
> +
> +because int, hex, and string options will take these values of '0', '0x0',
> +and the empty string, respectively, when the dependencies are unmet.
> +
> There are two types of symbols: constant and non-constant symbols.
> Non-constant symbols are the most common ones and are defined with the
> 'config' statement. Non-constant symbols consist entirely of alphanumeric
--
~Randy
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Documentation: warn against using int, hex, string options as expressions in Kconfig
2026-07-31 0:25 ` Nathan Chancellor
@ 2026-07-31 9:43 ` Julian Braha
2026-07-31 10:33 ` Arnd Bergmann
0 siblings, 1 reply; 5+ messages in thread
From: Julian Braha @ 2026-07-31 9:43 UTC (permalink / raw)
To: Nathan Chancellor
Cc: nsc, corbet, skhan, jani.nikula, arnd, stefan.hengelein,
linux-kbuild, linux-kernel, linux-doc, nico, officialnaumansabir,
rdunlap, vegard.nossum, kees, tj
On 7/31/26 01:25, Nathan Chancellor wrote:
> Drop this quoting of y for clarity?
Sure, I'll send a v2.
>> This 'if FOO' will always be false, regardless of FOO's value (even when
>> FOO=1). The same goes for strings and hex.
> Hmmm, it might be kind of nice to either:
>
> 1. Warn about this in Kconfig directly (if possible)
> 2. Support this usage in Kconfig how one would intuitively expect from
> either C or Python where symbols with values of 0, 0x0, and '' would
> be treated as false and every other value set as true.
Agreed, an interpreter change for this is on my roadmap. Though I was
also considering to make this error out.
Would be good to get some more feedback from others on which approach is
preferred (Jani, Arnd?)
> That said, until either of those potentially happen, this patch seems
> fine.
Thanks for your review!
- Julian Braha
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Documentation: warn against using int, hex, string options as expressions in Kconfig
2026-07-31 9:43 ` Julian Braha
@ 2026-07-31 10:33 ` Arnd Bergmann
0 siblings, 0 replies; 5+ messages in thread
From: Arnd Bergmann @ 2026-07-31 10:33 UTC (permalink / raw)
To: Julian Braha, Nathan Chancellor
Cc: Nicolas Schier, Jonathan Corbet, Shuah Khan, Jani Nikula,
stefan.hengelein, linux-kbuild, linux-kernel, linux-doc,
Nicolas Pitre, officialnaumansabir, Randy Dunlap, Vegard Nossum,
Kees Cook, Tejun Heo
On Fri, Jul 31, 2026, at 11:43, Julian Braha wrote:
> On 7/31/26 01:25, Nathan Chancellor wrote:
>>> This 'if FOO' will always be false, regardless of FOO's value (even when
>>> FOO=1). The same goes for strings and hex.
>> Hmmm, it might be kind of nice to either:
>>
>> 1. Warn about this in Kconfig directly (if possible)
>> 2. Support this usage in Kconfig how one would intuitively expect from
>> either C or Python where symbols with values of 0, 0x0, and '' would
>> be treated as false and every other value set as true.
>
> Agreed, an interpreter change for this is on my roadmap. Though I was
> also considering to make this error out.
>
> Would be good to get some more feedback from others on which approach is
> preferred (Jani, Arnd?)
I'm fine with either of the two approaches, both seem better than
to document the current behavior just to change that again later.
If it's going to cause a hard error, we have to be sure to fix
all existing instances first, otherwise a warning would be better.
Arnd
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-07-31 10:33 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-30 14:01 [PATCH] Documentation: warn against using int, hex, string options as expressions in Kconfig Julian Braha
2026-07-31 0:25 ` Nathan Chancellor
2026-07-31 9:43 ` Julian Braha
2026-07-31 10:33 ` Arnd Bergmann
2026-07-31 0:32 ` Randy Dunlap
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox