Hi All,

After cleaning my vim source repo and rebuilding with the brand new gcc 10.1 (mingw64), I get these warnings:
<snip>
gcc -c -I. -Iproto -DWIN32 -DWINVER=0x0603 -D_WIN32_WINNT=0x0603 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD -pipe -march=native -Wall -O3 -fomit-frame-pointer -freg-struct-return main.c -o gobjnative/main.o
In file included from main.c:11:
main.c: In function 'early_arg_scan':
vim.h:343:33: warning: 'I' flag used with '%x' gnu_scanf format [-Wformat=]
  343 | # define SCANF_HEX_LONG_U "%Ix"
      | ^~~~~
vim.h:343:33: note: in definition of macro 'SCANF_HEX_LONG_U'
  343 | # define SCANF_HEX_LONG_U "%Ix"
      | ^~~~~
vim.h:343:36: note: format string is defined here
  343 | # define SCANF_HEX_LONG_U "%Ix"
      | ^
vim.h:343:33: warning: format '%x' expects argument of type 'unsigned int *', but argument 3 has type 'long_u *' {aka 'long lo
ng unsigned int *'} [-Wformat=]
  343 | # define SCANF_HEX_LONG_U "%Ix"
      | ^~~~~
vim.h:343:33: note: in definition of macro 'SCANF_HEX_LONG_U'
  343 | # define SCANF_HEX_LONG_U "%Ix"
      | ^~~~~
vim.h:343:36: note: format string is defined here
  343 | # define SCANF_HEX_LONG_U "%Ix"
      | ~~^
      | |
      |                                    unsigned int *
      | %Illx
vim.h:344:33: warning: format '%u' expects argument of type 'unsigned int *', but argument 3 has type 'long_u *' {aka 'long lo
ng unsigned int *'} [-Wformat=]
  344 | # define SCANF_DECIMAL_LONG_U "%Iu"
      | ^~~~~
vim.h:344:33: note: in definition of macro 'SCANF_DECIMAL_LONG_U'
  344 | # define SCANF_DECIMAL_LONG_U "%Iu"
      | ^~~~~
vim.h:344:36: note: format string is defined here
  344 | # define SCANF_DECIMAL_LONG_U "%Iu"
      | ~~^
      | |
      |                                    unsigned int *
      | %Illu

gcc -c -I. -Iproto -DWIN32 -DWINVER=0x0603 -D_WIN32_WINNT=0x0603 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD -pipe -march=native -Wall -O3 -fomit-frame-pointer -freg-struct-return dict.c -o gobjnative/dict.o
In file included from dict.c:14:
In function 'dictitem_copy',
    inlined from 'dict_extend' at dict.c:936:9:
vim.h:1591:26: warning: 'strcpy' offset 0 from the object at '<unknown>' is out of the bounds of referenced subobject 'di_key'  with type 'char_u[1]' {aka 'unsigned char[1]'} at offset 0 [-Warray-bounds]
 1591 | #define STRCPY(d, s)     strcpy((char *)(d), (char *)(s))
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim.h:1591:26: note: in definition of macro 'STRCPY'
 1591 | #define STRCPY(d, s)     strcpy((char *)(d), (char *)(s))
      | ^~~~~~
In file included from vim.h:1815,
                 from dict.c:14:
dict.c: In function 'dict_extend':
structs.h:1466:12: note: subobject 'di_key' declared here
 1466 |     char_u di_key[1]; // key (actually longer!)
      | ^~~~~~

gcc -c -I. -Iproto -DWIN32 -DWINVER=0x0603 -D_WIN32_WINNT=0x0603 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD -pipe -march=native -Wall -O3 -fomit-frame-pointer -freg-struct-return evalvars.c -o gobjnative/evalvars.o
evalvars.c: In function 'lookup_scriptvar':
cc1.exe: warning: function may return address of local variable [-Wreturn-local-addr]
evalvars.c:2504:12: note: declared here
 2504 |     char_u buffer[30];
      | ^~~~~~

gcc -c -I. -Iproto -DWIN32 -DWINVER=0x0603 -D_WIN32_WINNT=0x0603 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD -pipe -march=native -Wall -O3 -fomit-frame-pointer -freg-struct-return userfunc.c -o gobjnative/userfunc.o
In file included from userfunc.c:14:
In function 'cat_func_name',
    inlined from 'get_user_func_name' at userfunc.c:3425:2:
vim.h:1591:26: warning: 'strcpy' offset 0 from the object at '<unknown>' is out of the bounds of referenced subobject 'uf_name ' with type 'char_u[1]' {aka 'unsigned char[1]'} at offset 0 [-Warray-bounds]
 1591 | #define STRCPY(d, s)     strcpy((char *)(d), (char *)(s))
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim.h:1591:26: note: in definition of macro 'STRCPY'
 1591 | #define STRCPY(d, s)     strcpy((char *)(d), (char *)(s))
      | ^~~~~~
In file included from vim.h:1815,
                 from userfunc.c:14:
userfunc.c: In function 'get_user_func_name':
structs.h:1569:12: note: subobject 'uf_name' declared here
 1569 |     char_u uf_name[1]; // name of function (actually longer); can
      | ^~~~~~~
</snip>

I've had a look at the vim.h warning (the one from main.c). From what I can gather the "I" in the "%Ix" and "%Iu" scan format strings is a MS-specific thing. Anyhow, replacing the "I" with "z" in the format strings (lines 343 to 345 in vim.h) makes the warnings go away (see the attached patch).

Not sure about the others at the moment.

Cheers
John

--
--
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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/32b6dad5-55af-7711-c234-e6083678c6d1%40internode.on.net.
--- vim.h.orig  2020-04-13 05:57:51.271454000 +1000
+++ vim.h       2020-05-09 17:24:39.393354000 +1000
@@ -340,9 +340,9 @@
 #ifdef _WIN64
 typedef unsigned __int64       long_u;
 typedef                 __int64        long_i;
-# define SCANF_HEX_LONG_U       "%Ix"
-# define SCANF_DECIMAL_LONG_U   "%Iu"
-# define PRINTF_HEX_LONG_U      "0x%Ix"
+# define SCANF_HEX_LONG_U       "%zx"
+# define SCANF_DECIMAL_LONG_U   "%zu"
+# define PRINTF_HEX_LONG_U      "0x%zx"
 #else
   // Microsoft-specific. The __w64 keyword should be specified on any typedefs
   // that change size between 32-bit and 64-bit platforms.  For any such type,

Raspunde prin e-mail lui