On Sat, Apr 26, 2025 at 1:57 PM Linus Torvalds <torva...@linux-foundation.org> wrote: > > On Sat, 26 Apr 2025 at 13:05, Nathan Chancellor <nat...@kernel.org> wrote: > > > > KBUILD_CFLAGS += -mllvm -trap-unreachable > > Hmm. That certainly builds for me, but yeah, it generates new objtool > warnings, notably > > panic() missing __noreturn in .c/.h or NORETURN() in noreturns.h > > and I *think* that is because that flag makes clang not honour our > *explicit* "this code is unreachable" annotations. > There's also this flag:
-mllvm -no-trap-after-noreturn Here's the documentation for both flags: static cl::opt<bool> EnableTrapUnreachable("trap-unreachable", cl::Hidden, cl::desc("Enable generating trap for unreachable")); static cl::opt<bool> EnableNoTrapAfterNoreturn( "no-trap-after-noreturn", cl::Hidden, cl::desc("Do not emit a trap instruction for 'unreachable' IR instructions " "after noreturn calls, even if --trap-unreachable is set.")); Could you share how you configured your build? -bw > So now objtool complains about the fact that clang has generated some > random code that follows a call to 'panic()' even though objtool knows > that panic() cannot return. > > And those explicit annotations definitely should be honored. > > IOW, there's a *big* difference between "the programmer told me this > is unreachable, so I won't generate code past this point" and "I have > decided this is undefined behavior, so now I won't generate code past > this point". > > So what I'm asking for is absolutely not "trap on unreachable". That's > wrong and just plain stupid. > > I'm asking for "trap on UD instead of *assuming* it's unreachable". > > Because clearly that code *can* be reached, it's just doing something > undefined. > > See? Big big difference. > > Linus