https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120780
--- Comment #10 from Siddhesh Poyarekar <siddhesh at gcc dot gnu.org> --- Minimal reproducer, I've written this independently, not reduced from the preprocessed source, but I'm pretty sure this is essentially what it is: typedef __SIZE_TYPE__ size_t; struct inner { int a; int b; int c; }; struct fam_struct { int dummy; int priv_size; char priv[] __attribute__((__counted_by__ (priv_size))); }; struct container { int mcast_rate[6]; struct inner mesh; }; extern void __warn (void) __attribute__ ((__warning__ ("__builtin_dynamic_object_size failed"))); static void child (struct inner *ifmsh) { struct container *sdata = (struct container *) ((void *) ifmsh - __builtin_offsetof (struct container, mesh)); if (__builtin_dynamic_object_size(sdata->mcast_rate, 1) != sizeof (sdata->mcast_rate)) __warn (); } int parent (struct fam_struct *dev) { struct container *sdata = (void *) dev->priv; struct inner *ifmsh = &sdata->mesh; child (ifmsh); } $ gcc/cc1 -fdump-tree-objsz-details -std=gnu17 -quiet -O2 -o /dev/null -Werror ../cfg-min.c In function ‘child’, inlined from ‘parent’ at ../cfg-min.c:43:3: ../cfg-min.c:35:5: error: call to ‘__warn’ declared with attribute warning: __builtin_dynamic_object_size failed [-Werror=attribute-warning] 35 | __warn (); | ^~~~~~~~~ cc1: all warnings being treated as errors