Hi Richard,
here is another case where it seems that TBAA goes wrong. Since this is not in a loop, it seems this is something else than what we discussed. Is this a known issue? Best, Martin #include <stdio.h> #include <stdlib.h> union u { long x; long long y; }; __attribute__((noinline,noclone)) long test(long *px, long long *py, union u *pu) { *px = 0; *py = 1; long xy = pu->y; pu->x = xy; return *px; } int main(void) { union u u; printf("%ld\n", test(&u.x, &u.y, &u)); } https://godbolt.org/z/a9drezEza