Hi Linus, On Sat, Apr 26, 2025 at 10:42:40AM -0700, Linus Torvalds wrote: > But I *really* think that clang silently just generating known bad > code for invalida operations like this is very very dangerous, and is > a bug in clang. > > Can we *please* get a flag for clang that it doesn't just stop > generating code because it has decided some path is unreachable or > undefined? Add a TRAP instruction, for Chrissake! PLEASE! > > Maybe such a flag already exists, and the kernel just doesn't know > about it. This whole "do random things for undefined behavior" is a > bug, dammit.
I think there is an internal LLVM flag, '-trap-unreachable', that does what we would want here. Within the last year, I tested adding something like KBUILD_CFLAGS += -mllvm -trap-unreachable to Makefile under an 'ifdef CONFIG_CC_IS_CLANG' and it eliminated most objtool warnings but I seem to recall it introducing some new ones, I think around __noreturn functions? I know Josh has done a lot of work on objtool recently so I should retest. GCC has this behavior exposed under -funreachable-traps, I could see about trying to expose that in clang. This specific case started with clang-20 and your analysis is spot on: https://lore.kernel.org/20241220223403.GA2605890@ax162/ On Sat, Apr 26, 2025 at 10:52:10AM -0700, Linus Torvalds wrote: > Please people: "ASSERT()" like behavior is simply not acceptable in > the kernel. WARN_ON() and friends need to either be otherwise benign > (ie "warn but then continue to do valid things") or they need to be > *handled* (ie "warn and then refuse to do things that aren't valid"). > > Just warning and then doing random crap is not sane. If you aren't > capable of dealing with the situation, don't do the bogus test. Just > warning about it isn't fixing the code, and can make things actively > worse as in these two examples. This was the most recent series to clear up those objtool warnings in the AMD driver: https://lore.kernel.org/20250114132856.19463-1-yangtie...@loongson.cn/ Not sure if other ASSERT() uses should be audited or eliminated too but that would at least make the build cleaner. > Not this silent "now I generate random code by falling through to > something else entirely" that clang does now. Not good. Aside from what I mention above, I suppose getting OBJTOOL_WERROR in useful shape would help with this a little bit because it will be easier for me and others testing tip of tree LLVM to notice when optimizations introduce new warnings. Cheers, Nathan