https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108778
--- Comment #1 from Wilhelm M <klaus.doldinger64 at googlemail dot com> --- This is a simpler example: #include <avr/io.h> #include <stdint.h> typedef struct Cpu { // this is missing in avr headers volatile uint8_t reserved_0_3[4]; volatile uint8_t ccp; volatile uint8_t reserved_5_a[6]; volatile uint8_t rampz; volatile uint8_t reserved_c; volatile uint16_t sp; volatile uint8_t sreg; } Cpu_t; #define CPU (*(Cpu_t*) 0x0030) static uint16_t g; static void func(void) { for(uint8_t i = 0; i < 20; i++) { ++g; // SREG; // prohibits optimization CPU.sreg; } } int main() { func(); }