Hi John,
2020/5/9 Sat 16:30:42 UTC+9 John Marriott wrote:
>
> 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
>
Unfortunately, older MSVC (e.g. VC 2010) doesn't support "z" specifier.
Do the warnings disappear if you change "%I" to "%I64"?
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].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/619b331e-4f42-49ae-a8ae-539d84be955a%40googlegroups.com.