https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71053
Berni <bseifert at gmx dot at> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bseifert at gmx dot at --- Comment #3 from Berni <bseifert at gmx dot at> --- I also reproduced the bug after building the avr gcc 6.1.0 tool chain. if you wait for the ADC to complete a measurement, you use the following code: while (ADCSRA & _BV(ADSC)); which looks like the following after the post processor: while ((*(volatile uint8_t *)(0x7A)) & (1 << (6))); which looks fine, but it compiles to: 3c38: 80 91 7a 00 lds r24, 0x007A 3c3c: 80 74 andi r24, 0x40 ; 64 3c3e: 81 11 cpse r24, r1 3c40: fe cf rjmp .-4 ; 0x3c3e <main+0x12> this is an endless loop. It does not respect the volatile keyword.