https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107586
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |INVALID Status|ASSIGNED |RESOLVED --- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> --- If I hide the constant 70, then I get the error also with -O2: diff -u pr107586-orig.c pr107586.c --- pr107586-orig.c 2022-12-02 14:19:49.392836836 +0100 +++ pr107586.c 2022-12-02 14:19:33.096414298 +0100 @@ -3,13 +3,15 @@ int x; }; +int N = 70; + void h(struct a *b) { struct a c[70]; int i; - for (i = 0; i < 70; i++) + for (i = 0; i < N; i++) c[i].x = 1; - __builtin_memcpy(b, c, 70*sizeof(struct a)); + __builtin_memcpy(b, c, N*sizeof(struct a)); __builtin_printf("%d\n", b->x); }; void g() So the compiler can propagate that, so closing as invalid.