I got bit by a bug IMO. Reading the high byte of 16-bit AVR registers does not follow the [poorly described] required protocol. This includes reads to UBRR1H, UBRR0H,
OCR3BH, OCR3AH, ICR3H, TCNT3H, OCR1BH, OCR1AH, ICR1H, TCNT1H, and EEARH.
I presume there is a parallel bug writing to the corresponding low bytes, but I have not tried that. In each case, the byte read of the high byte or the write to the low byte requires a dummy access first.
I understand there can be different opinions about what the tools should do and what the individual programmer should do to match architectural quirks.
There is also a lesser potential rare problem with the 16-bit access to special registers UBRR1, UBRR0, OCR3B, OCR3A, ICR3, TCNT3, OCR1B, OCR1A, ICR1, TCNT1, or EEAR getting corrupted by an untimely interrupt between the two compiler-generated byte accesses.
If somebody want more info, or even just wants to comment that that is the programmer's job, say please say so. I know how to deal for my project now; I know the workaround.