I wrote:
> Thanks. There are a few where I don't understand what the warning would
> be:
I now see the errors in the AppVeyor build
> --- a/src/undo.c
> +++ b/src/undo.c
> @@ -265,7 +265,7 @@ u_save(linenr_T top, linenr_T bot)
> return OK;
>
> if (top > curbuf->b_ml.ml_line_count
> - || top >= bot
> + || top - bot >= 0
> || bot > curbuf->b_ml.ml_line_count + 1)
> return FALSE; /* rely on caller to do error messages */
>
undo.c: In function 'u_save_cursor':
undo.c:268:6: warning: assuming signed overflow does not occur when assuming that (X - c) > X is always false [-Wstrict-overflow]
|| top >= bot
^
This is bogus compiler warning, there is no overflow here. I assume
internally "top >= bot" gets replaced by "top - 1 > bot", which is wrong.
Or the compiler inlines the condition at the caller side.
Perhaps the warning goes away when we use "top == bot || top > bot"?
I don't want to actually do that though.
> --- a/src/getchar.c
> +++ b/src/getchar.c
> @@ -5218,7 +5218,7 @@ check_map(
> && s[2] != NUL)
> {
> s += 3;
> - if (len > mp->m_keylen - 3)
> + if (len - mp->m_keylen + 3 > 0)
> minlen = mp->m_keylen - 3;
> }
> if (STRNCMP(s, keys, minlen) == 0)
This is also bogus:
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)
^
Left and right use different variables, thus the "always true" part does
not apply.
--
GALAHAD hurries to the door and pushes through it. As he leaves the room
we CUT TO the reverse to show that he is now in a room full of bathing
and romping GIRLIES, all innocent, wide-eyed and beautiful. They smile
enchantingly at him as he tries to keep walking without being diverted by
the lovely sights assaulting his eyeballs.
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD