remove many many compilation warnings on mingw

102 views
Skip to first unread message

mattn

unread,
Feb 16, 2016, 3:13:47 AM2/16/16
to vim_dev
After Patch 7.4.1323, mingw vomit too many compilation warnings which is hidden by -w flag. Below is a patch to remove them.

https://gist.github.com/mattn/6542c52e98dce6923fc3

- mattn

Bram Moolenaar

unread,
Feb 16, 2016, 9:07:21 AM2/16/16
to mattn, vim_dev

Yasuhiro Matsumoto wrote:

> After Patch 7.4.1323, mingw vomit too many compilation warnings which is hidden by -w flag. Below is a patch to remove them.
>
> https://gist.github.com/mattn/6542c52e98dce6923fc3

Thanks. There are a few where I don't understand what the warning would
be:

--- 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 */

--- 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)

I'll not include these for now.

--
Ten bugs in the hand is better than one as yet undetected.

/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///

Bram Moolenaar

unread,
Feb 17, 2016, 2:29:13 PM2/17/16
to mattn, vim_dev

I wrote:

> Yasuhiro Matsumoto wrote:
>
> > After Patch 7.4.1323, mingw vomit too many compilation warnings which is hidden by -w flag. Below is a patch to remove them.
> >
> > https://gist.github.com/mattn/6542c52e98dce6923fc3
>
> 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

mattn

unread,
Feb 24, 2016, 6:57:56 PM2/24/16
to vim_dev, matt...@gmail.com
This is warning to notice overflow between lhs/rhs. But we don't need to care about overflow because it doesn't take huge value. So below is one of fixes.

diff --git a/src/undo.c b/src/undo.c
index 2bf815b..5f33b55 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -267,7 +267,7 @@ u_save(linenr_T top, linenr_T bot)


return OK;

if (top > curbuf->b_ml.ml_line_count
- || top >= bot

+ || (unsigned long)top >= (unsigned long)bot

Bram Moolenaar

unread,
Feb 25, 2016, 5:11:45 AM2/25/16
to mattn, vim_dev
I do like to get rid of all warnings. But I think this one should be
fixed in the compiler. Someone mentioned a compiler update did get rid
of some of these kind of warnings, so there is hope.

--
BEDEVERE: Oooooh!
LAUNCELOT: No "Aaaaarrrrrrggghhh ... " at the back of the throat.
BEDEVERE: No! "Oooooh!" in surprise and alarm!
Reply all
Reply to author
Forward
0 new messages