Hi,

A simplified Vim9 script that reproduces this crash is below:

===============================================
vim9script

def F()
  {
    var m = 10
  }
  echo m
enddef

def Test()
  var d: dict<any> = {}
  d->extend({A: 10, Func: function('F', [])})
enddef

Test()
===============================================

If you source the above script, then the latest Vim crashes.

- Yegappan

On Sat, Mar 13, 2021 at 8:21 AM Yegappan Lakshmanan <[email protected]> wrote:
>
> Hi,
>
> I am seeing a Vim (8.2.2590) crash with my vim9 LSP plugin
> when a variable declaration is moved inside a try statement.
>
> A fragment of a function that causes the crash is below:
>
> def ProcessMessages(lspserver: dict<any>): void
>    try
>      var msg = content->json_decode()
>    catch
>      continue
>    endtry
>    if msg->has_key('result') || msg->has_key('error')
>    endif
> enddef
>
> In the above fragment of code the variable 'msg' is declared
> inside the try block but is accessed outside of the block.
> If the variable declaration is moved outside the try block, then
> Vim doesn't crash.
>
> I am not able to reproduce this using a simplified function.
>
> The crash traceback is below.
>
> Regards,
> Yegappan
>
> Program received signal SIGSEGV, Segmentation fault.
> equal_type (type1=type1@entry=0x0, type2=type2@entry=0x5555558a3930 <t_any>)
>     at vim9type.c:922
> 922     if (type1->tt_type != type2->tt_type)
> (gdb) bt
> #0  equal_type
>     (type1=type1@entry=0x0, type2=type2@entry=0x5555558a3930 <t_any>)
>     at vim9type.c:922
> #1  0x00005555557914db in common_type
>     (type_gap=0x7fffffffbd20, dest=0x7fffffffbcb0,
> type2=0x5555558a3930 <t_any>, type1=0x0) at vim9type.c:964
> #2  typval2type_int
>     (tv=tv@entry=0x7fffffffbe00, type_gap=type_gap@entry=0x7fffffffbd20)
>     at vim9type.c:302
> #3  0x0000555555791e6c in typval2type
>     (type_gap=0x7fffffffbd20, tv=0x7fffffffbe00) at vim9type.c:424
> #4  check_typval_type
>     (expected=expected@entry=0x5555558a3d60 <t_dict_any>,
> actual_tv=actual_tv@entry=0x7fffffffbe00, where=...) at vim9type.c:424
> #5  0x0000555555791f13 in check_typval_arg_type
>     (expected=expected@entry=0x5555558a3d60 <t_dict_any>,
> actual_tv=actual_tv@entry=0x7fffffffbe00, arg_idx=arg_idx@entry=2) at
> vim9type.c:409
> #6  0x000055555565dfa1 in extend
>     (argvars=0x7fffffffbdf0, rettv=0x555555b3cbc0,
> arg_errmsg=<optimized out>, is_new=0) at list.c:2666
> #7  0x0000555555786c39 in call_bfunc
>     (func_idx=105, argcount=2, ectx=ectx@entry=0x7fffffffc040)
>     at vim9execute.c:663
> #8  0x000055555578cbb8 in call_def_function
>     (ufunc=ufunc@entry=0x555555b23040, argc_arg=argc_arg@entry=1,
> argv=argv@entry=0x7fffffffd1f0, partial=<optimized out>,
> rettv=rettv@entry=0x7fffffffd3c0)
>     at vim9execute.c:2469
> #9  0x0000555555774027 in call_user_func
>     (fp=fp@entry=0x555555b23040, argcount=argcount@entry=1,
> argvars=argvars@entry=0x7fffffffd1f0,
> rettv=rettv@entry=0x7fffffffd3c0, funcexe=funcexe@entry=
>     0x7fffffffd440, selfdict=selfdict@entry=0x0) at userfunc.c:1673
> #10 0x00005555557746cb in call_user_func_check
>     (selfdict=<optimized out>, funcexe=
>     0x7fffffffd440, rettv=0x7fffffffd3c0, argvars=0x7fffffffd1f0,
> argcount=1, fp=0x555555b23040) at userfunc.c:2061
> #11 call_user_func_check
>     (fp=0x555555b23040, argcount=1, argvars=0x7fffffffd1f0,
> rettv=0x7fffffffd3c0, funcexe=0x7fffffffd440, selfdict=<optimized
> out>) at userfunc.c:2027
> #12 0x0000555555774bbd in call_func
>     (funcname=funcname@entry=0x555555b32770 "lsp#addServer",
> len=len@entry=-1, rettv=rettv@entry=0x7fffffffd3c0,
> argcount_in=argcount_in@entry=1,
> argvars_in=argvars_in@entry=0x7fffffffd1f0,
> funcexe=funcexe@entry=0x7fffffffd440)
>     at userfunc.c:2527
> #13 0x00005555557751df in get_func_tv
>     (name=name@entry=0x555555b32770 "lsp#addServer", len=len@entry=-1,
> rettv=rettv@entry=0x7fffffffd3c0, arg=arg@entry=0x7fffffffd3a8,
> evalarg=evalarg@entry=0x7fffffffd3f0,
> funcexe=funcexe@entry=0x7fffffffd440) at userfunc.c:932
> #14 0x000055555577589c in ex_call (eap=0x7fffffffd650) at userfunc.c:4513
> #15 0x000055555561297b in do_one_cmd (cookie=0x7fffffffdf00, fgetline=
>     0x555555700c60 <getsourceline>, cstack=0x7fffffffd800, flags=7,
> cmdlinep=0x7fffffffd5b0) at ex_docmd.c:2591
> #16 do_cmdline
>     (cmdline=cmdline@entry=0x5555558b8060 "set nocp", fgetline=fgetline@entry=
>     0x555555700c60 <getsourceline>,
> cookie=cookie@entry=0x7fffffffdf00, flags=flags@entry=7) at
> ex_docmd.c:1000
> #17 0x0000555555702840 in do_source
>     (fname=0x5555558101b1 "$HOME/.vimrc", check_other=<optimized out>,
> is_vimrc=<optimized out>, ret_sid=0x0) at scriptfile.c:1404
> #18 0x0000555555594f33 in source_startup_scripts
>     (parmp=0x5555558b0580 <params>) at main.c:3155
> #19 main (argc=<optimized out>, argv=<optimized out>) at main.c:400

-- 
-- 
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/CAAW7x7%3Do6uuPg4i6GFpFZ-M8mNcVqmHz4kffS1%2Bw-dJeuDG8Jg%40mail.gmail.com.

Raspunde prin e-mail lui