https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66110
--- Comment #8 from Kevin OConnor <kevin at koconnor dot net> --- Thanks! I can confirm the latest trunk performs the desired optimization. However, this test case still isn't fully optimized: void f2(struct s1 *ps1, uint8_t *pi8) { ps1->f1 = 3; *pi8 = 8; ps1->f1 += 2; } That is, an "uint8_t*" still aliases with every other type. The "struct" optimization is more important for my usage, but it is unfortunate that uint8_t*/int8_t* are pessimized. (In particular, there does not appear to be any way to declare a pointer to an 8 bit integer that doesn't alias every other type.) I can open a separate bugzilla entry on the above.