В определениях CMSIS для gcc вы можете найти что-то вроде этого:
static __INLINE void __DMB(void) { __ASM volatile ("dmb"); }
Мой вопрос: какой смысл имеет барьер памяти, если он не объявляет "память" в списке clobber?
Это ошибка в core_cm3.h или есть причина, по которой gcc должен вести себя правильно без какой-либо дополнительной помощи?