I have the following c++ source test compiled by 4.8.3 :
void setCanceling( const char* OrderNoptr ){
if( strcmp( BuyBook.OrderNo,OrderNoptr ) == 0 ){
BuyBook.seqno++ ;
asm volatile("":::"memory") ;
BuyBook.Canceling = 1 ;
asm volatile("":::"memory") ;
BuyBook.seqno++ ;
}
}
I won't like source to be modified by compiler optimizer to this :
void setCanceling( const char* OrderNoptr ){
register int r = BuyBook.seqno ;
if( strcmp( BuyBook.OrderNo,OrderNoptr ) == 0 ){
BuyBook.Canceling = 1 ;
r += 2 ;
}
BuyBook.seqno = r ;
}
Is that possible asm volatile("":::"memory") can prevent such a modification by compiler in my test ?!