.. _2: https://reviews.llvm.org/D85174
 .. _3: https://reviews.llvm.org/D83878
 .. _4: https://reviews.llvm.org/D83242
+
+Floating-point tests and Clang version
+======================================
+
+Certain selftests, e.g. core_reloc, require support for the floating-point
+types, which was introduced in `Clang 13`__. The older Clang versions will
+either crash when compiling these tests, or generate an incorrect BTF.
+
+__  https://reviews.llvm.org/D83289
 
                .arr_elem_sz = sizeof(((type *)0)->arr_field[0]),       \
                .ptr_sz = 8, /* always 8-byte pointer for BPF */        \
                .enum_sz = sizeof(((type *)0)->enum_field),             \
+               .float_sz = sizeof(((type *)0)->float_field),           \
        }
 
 #define SIZE_CASE(name) {                                              \
 
        int arr_elem_sz;
        int ptr_sz;
        int enum_sz;
+       int float_sz;
 };
 
 struct core_reloc_size {
        int arr_field[4];
        void *ptr_field;
        enum { VALUE = 123 } enum_field;
+       float float_field;
 };
 
 struct core_reloc_size___diff_sz {
        char arr_field[10];
        void *ptr_field;
        enum { OTHER_VALUE = 0xFFFFFFFFFFFFFFFF } enum_field;
+       double float_field;
 };
 
 /* Error case of two candidates with the fields (int_field) at the same
        int arr_field[4];
        void *ptr_field;
        enum { VALUE___1 = 123 } enum_field;
+       float float_field;
 };
 
 struct core_reloc_size___err_ambiguous2 {
        int arr_field[4];
        void *ptr_field;
        enum { VALUE___2 = 123 } enum_field;
+       float float_field;
 };
 
 /*
 
        int arr_elem_sz;
        int ptr_sz;
        int enum_sz;
+       int float_sz;
 };
 
 struct core_reloc_size {
        int arr_field[4];
        void *ptr_field;
        enum { VALUE = 123 } enum_field;
+       float float_field;
 };
 
 SEC("raw_tracepoint/sys_enter")
        out->arr_elem_sz = bpf_core_field_size(in->arr_field[0]);
        out->ptr_sz = bpf_core_field_size(in->ptr_field);
        out->enum_sz = bpf_core_field_size(in->enum_field);
+       out->float_sz = bpf_core_field_size(in->float_field);
 
        return 0;
 }