Hi All , We are looking at the C sample i.e
extern int i,j; int test() { while(1) { i++; j=20; } return 0; } command used :(gcc 8.1.0) gcc -S test.c -O2 the generated asm for x86 .L2: jmp .L2 we understand that,the infinite loop is not deterministic ,compiler is free to treat as that as UB and do aggressive optimization ,but we need keep the side effects like j=20 untouched by optimization . Please note that using the volatile qualifier for i and j or empty asm("") in the while loop,will stop the optimizer ,but we don't want do that. Anyone from the community ,please share their insights why above transformation is right ? and without using volatile or memory barrier ,how we can stop the above transformation . Thank you in advance. ~Umesh