Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
init: fix -Wmissing-variable-declarations warning
Hi all, I was looking to get some help on solving this -Wmissing-variable-declarations warning as there is some hope to turn it on for W=1 soon [1]. When building x86/defconfig with Clang-18 I encounter the following warning: | init/main.c:189:13: warning: no previous extern declaration for non-static variable 'envp_init' [-Wmissing-variable-declarations] | 189 | const char *envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, }; | | ^ | init/main.c:189:7: note: declare 'static' if the variable is not intended to be used outside of this translation unit | 189 | const char *envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, }; | | ^ It seems like the obvious solution is to just add the `static` keyword and be done with it. I suspect, however, that it is not so simple for the following reasons: Firstly, `envp_init` is surrounded by two other variables that have been explicitly marked as `static` which leads me to believe that this one was intentionally _not_ marked as static for some reason: | static const char *argv_init[MAX_INIT_ARGS+2] = { "init", NULL, }; | static const char *envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, }; | static const char *panic_later, *panic_param; Secondly, there exists this `extern` declaration for `envp_init`: | init/do_mounts_initrd.c | 90: extern char *envp_init[]; This one is tricky because it seems like I can rename (effectively remove) this extern symbol entirely and still build a kernel image. If it truly is the case that this extern declaration works then why does Clang produce the warning at all? FWIW, I've tried moving `extern char *envp_init[];` to top-level scope inside of `do_mounts_initrd.c` which did _not_ work in fixing the warning. So all in all, it looks like just adding `static` fixes the warning (which it does) but I am not sure about the other ramifications of this patch especially considering the second point I brought up above regarding the extern declaration already existing (but seemingly not doing anything). Any help here would be appreciated! Link: ClangBuiltLinux#1920 [1] Signed-off-by: Justin Stitt <justinstitt@google.com>
- Loading branch information