On Wed, Mar 20, 2019 at 6:36 PM Andrew Haley <a...@redhat.com> wrote: > > On 3/20/19 2:08 PM, Moritz Strübe wrote: > > > > Ok, I played around a bit. Interestingly, if I set > > -fsanitize=udefined and -fsanitize-undefined-trap-on-error the > > compiler detects that it will always trap, and optimizes the code > > accordingly (the code after the trap is removed).* Which kind of > > brings me to David's argument: Shouldn't the compiler warn if there > > is undefined behavior it certainly knows of? > > Maybe an example would help. > > Consider this code: > > for (int i = start; i < limit; i++) { > foo(i * 5); > } > > Should GCC be entitled to turn it into > > int limit_tmp = i * 5; > for (int i = start * 5; i < limit_tmp; i += 5) { > foo(i); > } > > If you answered "Yes, GCC should be allowed to do this", would you > want a warning? And how many such warnings might there be in a typical > program?
I assume i is signed int. Even then GCC may not do this unless it knows the loop is entered (start < limit). Richard. > > -- > Andrew Haley > Java Platform Lead Engineer > Red Hat UK Ltd. <https://www.redhat.com> > EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671