kees added a comment. Here's a test-case. I'd expect 6 remarks from building this:
/* Build with -Wall -O2 -fstrict-flex-arrays=3 -fsanitize=bounds -Rarray-bounds */ #include <stdint.h> #include <stdio.h> #include <string.h> #include <malloc.h> #define report_size(p, index) do { \ const size_t bdos = __builtin_dynamic_object_size(p, 1); \ \ if (__builtin_constant_p(bdos)) { \ if (bdos == SIZE_MAX) { \ printf(#p " has unknowable size\n"); \ } else { \ printf(#p " has a fixed size: %zu\n", bdos); \ } \ } else { \ printf(#p " has a dynamic size: %zu\n", bdos); \ } \ printf(#p "[" #index "] assignment: %d\n", (p)[index] = 15); \ } while (0) struct fixed { unsigned long flags; size_t foo; int array[16]; }; /* should emit "fixed" */ void do_fixed(struct fixed *p, int index) { report_size(p->array, 0); report_size(p->array, index); } struct flex { unsigned long flags; size_t foo; int array[]; }; /* should emit "dynamic" */ void do_dynamic(unsigned char count, int index) { /* malloc() is marked with __attribute__((alloc_size(1))) */ struct flex *p = malloc(sizeof(*p) + count * sizeof(*p->array)); report_size(p->array, 0); report_size(p->array, index); free(p); } /* should emit "unknowable" */ void do_unknown(struct flex *p, int index) { report_size(p->array, 0); report_size(p->array, index); } Currently, it only emits once for the compile-time known index with a compile-time known array size: array.c:31:17: remark: accessing fixed sized array 'int[16]' by 0 [-Rarray-bounds] report_size(p->array, 0); ^ Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D144136/new/ https://reviews.llvm.org/D144136 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits