Open2

gccの `-fstrict-volatile-bitfields` の挙動がおかしい?

okuokuokuoku

ちょっと分離。深追いしないので。。

-fstrict-volatile-bitfieldsvolatile な配列について効いたり効かなかったりする。

okuokuokuoku

わかっていること

とりあえず最小ケースは作れたと思う: https://godbolt.org/z/6E6GofE4Y

対策としては、アクセスを関数にくくり出す https://godbolt.org/z/7GfGoqvrb と正常になることがわかった。

static inline uint32_t
getb(int idx){
    volatile pad* p = set->io;
    return p[idx].b;
}

volatile なポインタのdereferenceして得たオブジェクトのポインタは volatile だと思うんだけど。。