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();
}