On Sun, Jul 23, 2023 at 11:32 AM Arnd Bergmann <arnd@xxxxxxxx> wrote: > > >> If so, why can't we improve the compiler ? > > > > Agree. > > Sounds like a compiler bug. > > I don't know what you might want to change in the compiler > to avoid this. Compilers are free to decide which functions to > inline in the absence of noinline or always_inline flags. Clearly a compiler bug. Compilers should not produce false positive warnings regardless how inlining went and optimizations performed. > One difference between gcc and clang is that gcc tries to > be smart about warnings by using information from inlining > to produce better warnings, while clang never uses information > across function boundaries for generated warnings, so it won't > find this one, but also would ignore an unconditional use > of the uninitialized variable. > > >> If we have to change the kernel, what about the change below? > > > > To workaround the compiler bug we can simply init flag=0 to silence > > the warn, but even that is silly. Passing flag=0 into irqrestore is buggy. > > Maybe inc_active() could return the flags instead of modifying > the stack variable? that would also result in slightly better > code when it's not inlined. Which gcc are we talking about here that is so buggy?