https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70848
--- Comment #9 from ktkachov at gcc dot gnu.org --- This also happens for: volatile int *p; void test() { (*(volatile int*)(p)) = 'a'; (*(volatile int*)(p)) = 'b'; (*(volatile int*)(p)) = 'c'; } if you don't want to write to pointer literals