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.

Raspunde prin e-mail lui