$ icc -v icc version 16.0.3 (gcc version 4.8.0 compatibility) $ cat b.c void foo(int fl) { long i; for (i = 0; i < fl + 1; i++) { printf("%d\n", i); } } $ cat main.c #include <limits.h> void foo(int fl); int main() { foo(INT_MAX); } $ icc -m32 -O0 -fno-strict-overflow -falias -no-ansi-alias main.c b.c -o O0.out $ icc -m32 -O2 -fno-strict-overflow -falias -no-ansi-alias main.c b.c -o O2.out $ ./O0.out <no output> $ ./O2.out 0 1 2 ...
For O2, icc seems to be incorrectly ignoring the -fno-strict-overflow flag in 32-bit mode. The problem does not occur in 64-bit mode.
We are wondering if we should expect -fno-strict-overflow flag to work correctly with icc or not?