моя версия, касается gcc - может но не будет! ибо это криминал. начиная с 10 версии gcc кроет матом на конструкцию a+=b ; если а и b имеют volatile тип. до этого забивался болт, в следующей версии скорее всего это будет ошибка, во всяком случае я бы запретил и понудил пОграммиста написать a=a+b или a=b+a и чтоб он потом не плакал что не понимает в чем большая разница этих выражений. физика процесса - если не volotile то пишите как хотите и оптимизатор тоже как захочет так и за оптимизирует - нарушения логики не будет, а вот с volatile возникают "side effects", пример из жизни - читаешь регистр железки и в другом все обнуляеццо! а нооборот - читаеш из второго и потом из первого - нет! вот чтоб учесть специфику железных приколов не ломая стройную модель синтаксиса и семантики языка, логики оптимизаторов и тд - с volatile делайте теперь так! с другими недоразвитыми (платными) компиляторами все сложнее... но это их проблемы и их приобретателей.