On Mon, Jan 27, 2020 at 6:14 PM 'Palmer Dabbelt' via Clang Built Linux <clang-built-linux@xxxxxxxxxxxxxxxx> wrote: > > The current stable LLVM BPF backend fails to compile the BPF selftests > due to a compiler bug. The bug has been fixed in trunk, but that fix > hasn't landed in the binary packages I'm using yet (Fedora arm64). > Without this workaround the tests don't compile for me. > > This patch triggers a preprocessor warning on LLVM versions that > definitely have the bug. The test may be conservative (ie, I'm not sure > if 9.1 will have the fix), but it should at least make the current set > of stable releases work together. Do older versions of clang still work? Should there be a lower bounds? > > See https://reviews.llvm.org/D69438 for more information on the fix. I > obtained the workaround from > https://lore.kernel.org/linux-kselftest/aed8eda7-df20-069b-ea14-f06628984566@xxxxxxxxx/T/ > > Fixes: 20a9ad2e7136 ("selftests/bpf: add CO-RE relocs array tests") > Signed-off-by: Palmer Dabbelt <palmerdabbelt@xxxxxxxxxx> > --- > .../testing/selftests/bpf/progs/test_core_reloc_arrays.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/tools/testing/selftests/bpf/progs/test_core_reloc_arrays.c b/tools/testing/selftests/bpf/progs/test_core_reloc_arrays.c > index bf67f0fdf743..c9a3e0585a84 100644 > --- a/tools/testing/selftests/bpf/progs/test_core_reloc_arrays.c > +++ b/tools/testing/selftests/bpf/progs/test_core_reloc_arrays.c > @@ -40,15 +40,23 @@ int test_core_arrays(void *ctx) > /* in->a[2] */ > if (BPF_CORE_READ(&out->a2, &in->a[2])) > return 1; > +#if defined(__clang__) && (__clang_major__ < 10) && (__clang_minor__ < 1) > +# warning "clang 9.0 SEGVs on multidimensional arrays, see https://reviews.llvm.org/D69438" > +#else > /* in->b[1][2][3] */ > if (BPF_CORE_READ(&out->b123, &in->b[1][2][3])) > return 1; > +#endif > /* in->c[1].c */ > if (BPF_CORE_READ(&out->c1c, &in->c[1].c)) > return 1; > +#if defined(__clang__) && (__clang_major__ < 10) && (__clang_minor__ < 1) > +# warning "clang 9.0 SEGVs on multidimensional arrays, see https://reviews.llvm.org/D69438" > +#else > /* in->d[0][0].d */ > if (BPF_CORE_READ(&out->d00d, &in->d[0][0].d)) > return 1; > +#endif > > return 0; > } > -- > 2.25.0.341.g760bfbb309-goog > > -- > You received this message because you are subscribed to the Google Groups "Clang Built Linux" group. > To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@xxxxxxxxxxxxxxxx. > To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/20200128021145.36774-2-palmerdabbelt%40google.com. -- Thanks, ~Nick Desaulniers