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

Reply via email to