Hi Bram, 2016/2/23 Tue 4:19:25 UTC+9 Bram Moolenaar wrote: > Dominique Pellé wrote: > > > "Bram Moolenaar wrote: > > > > >> getchar.c: In function 'check_map': > > >> getchar.c:5221:7: warning: assuming signed overflow does not occur when > > >> assuming that (X - c) <= X is always true [-Wstrict-overflow] > > >> if (len > mp->m_keylen - 3) > > >> ^ > > > > > > That looks like a compiler problem. > > > > > > Line getchar.cpp:5221 is as follows: > > > > 5221 if (len > mp->m_keylen - 3) > > > > I don't think that it is spurious warnings, What gcc is saying > > here is that when it compiled the code, it made an optimization > > which assumed that an addition or subtraction did not overflow > > on 32 bits. This is a fair assumption, since overflow with sign > > integer is undefined behavior. It is only well defined with unsigned > > integers. However, lots of code wrongly assume that signed > > integer overflow wrap, which is not correct, and can cause real > > bugs when cranking up optimizations. Hence the warning. > > Unfortunately this is caused by recent C standard where people writing > compiler optimizers forced this "undefined behavior" so that they could > make programs 0.1% faster. Before this signed integers always > predictably overflowed, since practically all CPUs work that way. > I never like "undefined behavior". > > > In this case, if mp->m_keylen was INT_MIN, then > > "mp->keylen - 3" would overflow which would be undefined > > behavior (bug!). This is probably impossible in this case, > > because m_key_len is always a length so positive, so > > removing 3 will never overflow. > > > > That warning does not happen with -O2 but happens with -O3 > > on my machine. > > > > Attached patch fixes the warning in getchar.cpp by casting > > to unsigned. > > That makes it: > if ((unsigned)len > (unsigned)mp->m_keylen - 3U) > > That fixes the warning, but isn't that code wrong? if mp->m_keylen is > zero the result must be TRUE.
How about including mattn's patch? https://groups.google.com/d/msg/vim_dev/-2lLZ5Z2cPM/QQWIf225DwAJ Regards, Ken Takata -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
