On 06-Jun-2021 04:52, Bram Moolenaar wrote:
Patch 8.2.2944
Problem: Vim9: no error when using job or channel as a string.
Solution: Be more strict about conversion to string. (closes #8312)
Files: src/typval.c, src/job.c, src/proto/job.pro, src/channel.c,
src/proto/channel.pro, src/eval.c, src/vim9execute.c,
src/testdir/test_vim9_builtin.vim
After this patch, mingw64 (gcc 11.1.0) throws this warning and then this
linker error if FEAT_JOB_CHANNEL is disabled:
<snip>
gcc -c -I. -Iproto -DWIN32 -DWINVER=0x0603 -D_WIN32_WINNT=0x0603
-DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO
-pipe -march=native -Wall -O3 -fomit-frame-pointer -freg-struct-return
-fpie -fPIE -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD eval.c -o gobjnative/eval.o
eval.c: In function 'echo_string_core':
eval.c:5063:41: warning: implicit declaration of function
'job_to_string_buf' [-Wimplicit-function-declaration]
5063 | r = tv->v_type == VAR_JOB ? job_to_string_buf(tv,
numbuf)
| ^~~~~~~~~~~~~~~~~
eval.c:5064:46: warning: implicit declaration of function
'channel_to_string_buf' [-Wimplicit-function-declaration]
5064 | :
channel_to_string_buf(tv, numbuf);
| ^~~~~~~~~~~~~~~~~~~~~
eval.c:5063:15: warning: assignment to 'char_u *' {aka 'unsigned char
*'} from 'int' makes pointer from integer without a cast [-Wint-conversion]
5063 | r = tv->v_type == VAR_JOB ? job_to_string_buf(tv,
numbuf)
| ^
...
gcc -I. -Iproto -DWIN32 -DWINVER=0x0603 -D_WIN32_WINNT=0x0603
-DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO
-pipe -march=native -Wall -O3 -fomit-frame-pointer -freg-struct-return
-fpie -fPIE -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD -Wl,-nxcompat,-dynamicbase
-municode -s -mwindows -o gvim.exe gobjnative/arabic.o
gobjnative/arglist.o gobjnative/autocmd.o gobjnative/beval.o
gobjnative/blob.o gobjnative/blowfish.o gobjnative/buffer.o
gobjnative/bufwrite.o gobjnative/change.o gobjnative/charset.o
gobjnative/cindent.o gobjnative/clientserver.o gobjnative/clipboard.o
gobjnative/cmdexpand.o gobjnative/cmdhist.o gobjnative/crypt.o
gobjnative/crypt_zip.o gobjnative/debugger.o gobjnative/dict.o
gobjnative/diff.o gobjnative/digraph.o gobjnative/drawline.o
gobjnative/drawscreen.o gobjnative/edit.o gobjnative/eval.o
gobjnative/evalbuffer.o gobjnative/evalfunc.o gobjnative/evalvars.o
gobjnative/evalwindow.o gobjnative/ex_cmds.o gobjnative/ex_cmds2.o
gobjnative/ex_docmd.o gobjnative/ex_eval.o gobjnative/ex_getln.o
gobjnative/fileio.o gobjnative/filepath.o gobjnative/findfile.o
gobjnative/float.o gobjnative/fold.o gobjnative/getchar.o
gobjnative/gui_xim.o gobjnative/hardcopy.o gobjnative/hashtab.o
gobjnative/help.o gobjnative/highlight.o gobjnative/if_cscope.o
gobjnative/indent.o gobjnative/insexpand.o gobjnative/json.o
gobjnative/list.o gobjnative/locale.o gobjnative/main.o gobjnative/map.o
gobjnative/mark.o gobjnative/match.o gobjnative/memfile.o
gobjnative/memline.o gobjnative/menu.o gobjnative/message.o
gobjnative/misc1.o gobjnative/misc2.o gobjnative/mouse.o
gobjnative/move.o gobjnative/mbyte.o gobjnative/normal.o
gobjnative/ops.o gobjnative/option.o gobjnative/optionstr.o
gobjnative/os_mswin.o gobjnative/os_win32.o gobjnative/pathdef.o
gobjnative/popupmenu.o gobjnative/popupwin.o gobjnative/profiler.o
gobjnative/quickfix.o gobjnative/regexp.o gobjnative/register.o
gobjnative/scriptfile.o gobjnative/screen.o gobjnative/search.o
gobjnative/session.o gobjnative/sha256.o gobjnative/sign.o
gobjnative/spell.o gobjnative/spellfile.o gobjnative/spellsuggest.o
gobjnative/syntax.o gobjnative/tag.o gobjnative/term.o
gobjnative/testing.o gobjnative/textformat.o gobjnative/textobject.o
gobjnative/textprop.o gobjnative/time.o gobjnative/typval.o
gobjnative/ui.o gobjnative/undo.o gobjnative/usercmd.o
gobjnative/userfunc.o gobjnative/version.o gobjnative/vim9compile.o
gobjnative/vim9execute.o gobjnative/vim9script.o gobjnative/vim9type.o
gobjnative/viminfo.o gobjnative/winclip.o gobjnative/window.o
gobjnative/os_w32exe.o gobjnative/vimres.o gobjnative/xdiffi.o
gobjnative/xemit.o gobjnative/xprepare.o gobjnative/xutils.o
gobjnative/xhistogram.o gobjnative/xpatience.o gobjnative/gui.o
gobjnative/gui_w32.o gobjnative/gui_beval.o -lkernel32 -luser32 -lgdi32
-ladvapi32 -lcomdlg32 -lcomctl32 -lnetapi32 -lversion -lole32 -luuid
d:/users/john/documents/software/mingw/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
gobjnative/eval.o:eval.c:(.text+0x3f19): undefined reference to
`channel_to_string_buf'
d:/users/john/documents/software/mingw/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
gobjnative/eval.o:eval.c:(.text+0x41c1): undefined reference to
`job_to_string_buf'
collect2.exe: error: ld returned 1 exit status
make: *** [Make_cyg_ming.mak:1076: gvim.exe] Error 1
</snip>
The attachment patch tries to fix it.
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 vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/de55b785-1dbf-4cb2-50e7-723c012454bd%40internode.on.net.
--- eval.c.orig 2021-06-06 05:57:56.341962000 +1000
+++ eval.c 2021-06-06 06:18:46.322875500 +1000
@@ -5059,6 +5059,7 @@
case VAR_JOB:
case VAR_CHANNEL:
+#ifdef FEAT_JOB_CHANNEL
*tofree = NULL;
r = tv->v_type == VAR_JOB ? job_to_string_buf(tv, numbuf)
: channel_to_string_buf(tv, numbuf);
@@ -5067,6 +5068,7 @@
*tofree = string_quote(r, FALSE);
r = *tofree;
}
+#endif
break;
case VAR_INSTR: