[PATCH v2 1/2] kconfig: add prop_err function to simplify property error handling
From: Julian Braha
Date: Wed Oct 14 2026 - 11:08:36 EST
As suggested by Nicolas while reviewing another Kconfig property error [1],
we can add a prop_err() function to simplify the tracking and display of
Kconfig property errors.
Note that the formatting of the warning printing is changed slightly
(adding a space) to better match the formatting used by gcc. This causes
a change to the expected test output for the existing warnings that call
prop_warn() and menu_warn().
Link: https://lore.kernel.org/all/20260917-proficient-swift-of-masquerade-0ff7ce@l-nschier-aarch64/ [1]
Assisted-by: LLM
Suggested-by: Nicolas Schier <n.schier@xxxxxxxxx>
Signed-off-by: Julian Braha <julianbraha@xxxxxxxxx>
---
Changes since v1:
- adjust warning and error printing to match gcc (Nicolas)
Link to v1:
https://lore.kernel.org/linux-kbuild/20260922163749.2031594-1-julianbraha@xxxxxxxxx/
---
scripts/kconfig/menu.c | 27 ++++++++++++-------
.../tests/err_transitional/expected_stderr | 2 +-
2 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
index bda3e2650216..db5ba57125c5 100644
--- a/scripts/kconfig/menu.c
+++ b/scripts/kconfig/menu.c
@@ -43,7 +43,7 @@ void menu_warn(const struct menu *menu, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
- fprintf(stderr, "%s:%d:warning: ", menu->filename, menu->lineno);
+ fprintf(stderr, "%s:%d: warning: ", menu->filename, menu->lineno);
vfprintf(stderr, fmt, ap);
fprintf(stderr, "\n");
va_end(ap);
@@ -53,7 +53,17 @@ static void prop_warn(const struct property *prop, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
- fprintf(stderr, "%s:%d:warning: ", prop->filename, prop->lineno);
+ fprintf(stderr, "%s:%d: warning: ", prop->filename, prop->lineno);
+ vfprintf(stderr, fmt, ap);
+ fprintf(stderr, "\n");
+ va_end(ap);
+}
+
+static void prop_err(const struct property *prop, const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ fprintf(stderr, "%s:%d: error: ", prop->filename, prop->lineno);
vfprintf(stderr, fmt, ap);
fprintf(stderr, "\n");
va_end(ap);
@@ -246,18 +256,15 @@ static int menu_validate_number(struct symbol *sym, struct symbol *sym2,
if (sym2->type != S_UNKNOWN ||
!sym_string_valid(sym, sym2->name)) {
- fprintf(stderr, "%s:%d: error: '%s' is an invalid value for '%s'\n",
- prop->filename, prop->lineno, sym2->name,
- sym_type_name(sym->type));
+ prop_err(prop, "'%s' is an invalid value for '%s'",
+ sym2->name, sym_type_name(sym->type));
return 1;
}
if (!sym_string_check_bounds(sym, sym2->name)) {
- fprintf(stderr,
- "%s:%d: error: %s constant '%s' is outside the 64-bit %s bounds\n",
- prop->filename, prop->lineno, sym_type_name(sym->type),
- sym2->name, sym->type == S_INT ? "signed" : "unsigned");
-
+ prop_err(prop, "%s constant '%s' is outside the 64-bit %s bounds",
+ sym_type_name(sym->type), sym2->name,
+ sym->type == S_INT ? "signed" : "unsigned");
return 1;
}
diff --git a/scripts/kconfig/tests/err_transitional/expected_stderr b/scripts/kconfig/tests/err_transitional/expected_stderr
index b52db4f680f4..ba317850c043 100644
--- a/scripts/kconfig/tests/err_transitional/expected_stderr
+++ b/scripts/kconfig/tests/err_transitional/expected_stderr
@@ -1,4 +1,4 @@
-Kconfig:46:warning: config symbol defined without type
+Kconfig:46: warning: config symbol defined without type
Kconfig:7: error: transitional symbols can only have help sections
Kconfig:14: error: transitional symbols can only have help sections
Kconfig:21: error: transitional symbols can only have help sections
--
2.55.0