On (23/10/18 15:20), Mike Kravetz wrote: > > I think you need to initialize h, otherwise what value is passed to > > prep_and_add_bootmem_folios if the loop is not run because the list is > > empty. The compiler sees `h` is only given a value in the loop, so > > the loop must be run. That's obviously hazardous, but the compiler > > assumes there's no UB. At least that's my limited understanding > > looking at the IR diff Nathan got me in > > https://github.com/ClangBuiltLinux/linux/issues/1946. > > Thanks for looking closer at this Nick and Nathan! > > I think you are saying the compiler is running the loop because it wants > to initialize h before passing the value to another function. It does > this even if the explicit loop entry condition is false. Is that correct? The loop is getting promoted to "infinite" loop, there is no &pos->member != (head) condition check in the generated code at all (at least on my machine). I wish we could at least get the "possibly uninitialized variable" warning from the compiler in this case, which we'd translate to "hold my beer, I'm going to try one thing".