On Fri, May 04, 2018 at 03:16:14PM +0200, Mason wrote: > On 04/05/2018 01:03, John Carter wrote: > > > But compile with ... > > gcc -O3 -W -Wall -Wextra -o a a.c > > ...now results in NO warnings! > > > > ie. Although gcc _knows_ the assert _will_ trigger at run time... it can't > > tell me at compile time anymore. > > > > ie. Counter intuitively, adding asserts and error checks to my code has > > made me less safe. > > In the first version, gcc inlines the function call, which enables > further analysis. In the second version, the assert() call makes > gcc decide not to inline the function call, thus later analysis passes > are no longer able to spot the out-of-bounds access. No, that's not it. In the second version there *is* no out of bounds access! Segher