• Alexei Starovoitov's avatar
    selftests/bpf: Attempt to build BPF programs with -Wsign-compare · 495d2d81
    Alexei Starovoitov authored
    GCC's -Wall includes -Wsign-compare while clang does not.
    Since BPF programs are built with clang we need to add this flag explicitly
    to catch problematic comparisons like:
    
      int i = -1;
      unsigned int j = 1;
      if (i < j) // this is false.
    
      long i = -1;
      unsigned int j = 1;
      if (i < j) // this is true.
    
    C standard for reference:
    
    - If either operand is unsigned long the other shall be converted to unsigned long.
    
    - Otherwise, if one operand is a long int and the other unsigned int, then if a
    long int can represent all the values of an unsigned int, the unsigned int
    shall be converted to a long int; otherwise both operands shall be converted to
    unsigned long int.
    
    - Otherwise, if either operand is long, the other shall be converted to long.
    
    - Otherwise, if either operand is unsigned, the other shall be converted to unsigned.
    
    Unfortunately clang's -Wsign-compare is very noisy.
    It complains about (s32)a == (u32)b which is safe and doen't have surprising behavior.
    
    This patch fixes some of the issues. It needs a follow up to fix the rest.
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
    Acked-by: default avatarKumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/bpf/20231226191148.48536-2-alexei.starovoitov@gmail.com
    495d2d81
linked_funcs2.c 2.4 KB