On Mon, Mar 4, 2019 at 4:12 PM Nick Desaulniers <ndesaulni...@google.com> wrote: > > The inclusion of <linux/kernel.h> was causing issue as the definition of > __arch_hweight64 from arch/x86/include/asm/arch_hweight.h eventually gets > included. The definition is problematic when compiled with -m16 (all code > in arch/x86/boot/ is) as the "D" inline assembly constraint is rejected > by both compilers when passed an argument of type long long (regardless > of signedness, anything smaller is fine). > > Because GCC performs inlining before semantic analysis, and > __arch_hweight64 is dead in this translation unit, GCC does not report > any issues at compile time. Clang does the semantic analysis in the > front end, before inlining (run in the middle) can determine the code is > dead. I consider this another case of PR33587, which I think we can do > more work to solve. > > It turns out that arch/x86/boot/string.c doesn't actually need > linux/kernel.h, simply linux/limits.h and linux/compiler.h. Include them, > and sort the headers alphabetically.
Well, should have cut that out of the commit message too in V3...sigh. Boris assuming everyone's ok with this patch; can you just drop this sentence from the commit message should you apply the patch (or shall I send a v4)? > > Link: https://bugs.llvm.org/show_bug.cgi?id=33587 > Link: https://github.com/ClangBuiltLinux/linux/issues/347 > Reviewed-by: Nathan Chancellor <natechancel...@gmail.com> > Tested-by: Nathan Chancellor <natechancel...@gmail.com> > Suggested-by: Stephen Rothwell <s...@canb.auug.org.au> > Signed-off-by: Nick Desaulniers <ndesaulni...@google.com> > --- > Changes V2 -> V3: > * keep linux/types.h > > Changes V1 -> V2: > * Add Reviewed, Tested, Suggested tags. > * Drop linux/types.h; it's included in linux/limits.h. > > arch/x86/boot/string.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/boot/string.c b/arch/x86/boot/string.c > index 315a67b8896b..90154df8f125 100644 > --- a/arch/x86/boot/string.c > +++ b/arch/x86/boot/string.c > @@ -13,8 +13,9 @@ > */ > > #include <linux/types.h> > -#include <linux/kernel.h> > +#include <linux/compiler.h> > #include <linux/errno.h> > +#include <linux/limits.h> > #include <asm/asm.h> > #include "ctype.h" > #include "string.h" > -- > 2.21.0.352.gf09ad66450-goog > -- Thanks, ~Nick Desaulniers