Thanks to visit codestin.com
Credit goes to Github.com

Skip to content

Conversation

@64-bitman
Copy link
Contributor

Before, this script would error:

vim9script

class Test
    static var func: func = Test._Run

    static def _Run(): void
    enddef
endclass

@chrisbra
Copy link
Member

@yegappan ?

@64-bitman 64-bitman force-pushed the allow_staticfunc_in_classstaticvar branch from 2ed44c1 to 84598e9 Compare December 18, 2025 08:09
@64-bitman 64-bitman force-pushed the allow_staticfunc_in_classstaticvar branch 2 times, most recently from 4aae582 to 1666aad Compare December 19, 2025 02:20
@64-bitman
Copy link
Contributor Author

Hm, I keep getting use-after-free errors from test_vim9_class:

=================================================================
==24744==ERROR: AddressSanitizer: heap-use-after-free on address 0x7b3870829bd0 at pc 0x563531a4f2de bp 0x7fff37338bf0 sp 0x7fff37338be0
READ of size 4 at 0x7b3870829bd0 thread T0
    #0 0x563531a4f2dd in compile_dfunc_generate_default_return /srv/git/vim/src/vim9compile.c:4879
    #1 0x563531a51850 in compile_def_function /srv/git/vim/src/vim9compile.c:5081
    #2 0x5635319c281c in defcompile_function /srv/git/vim/src/userfunc.c:5956
    #3 0x5635319fbc75 in defcompile_class /srv/git/vim/src/vim9class.c:4049
    #4 0x5635319fbd83 in defcompile_classes_in_script /srv/git/vim/src/vim9class.c:4064
    #5 0x5635319c3093 in ex_defcompile /srv/git/vim/src/userfunc.c:6032
    #6 0x563531096a45 in do_one_cmd /srv/git/vim/src/ex_docmd.c:2629
    #7 0x563531089877 in do_cmdline /srv/git/vim/src/ex_docmd.c:1041
    #8 0x5635316ba0d8 in do_source_ext /srv/git/vim/src/scriptfile.c:1917
    #9 0x5635316b6380 in cmd_source /srv/git/vim/src/scriptfile.c:1392
    #10 0x5635316b6731 in ex_source /srv/git/vim/src/scriptfile.c:1435
    #11 0x563531096a45 in do_one_cmd /srv/git/vim/src/ex_docmd.c:2629
    #12 0x563531089877 in do_cmdline /srv/git/vim/src/ex_docmd.c:1041
    #13 0x5635310873d7 in do_cmdline_cmd /srv/git/vim/src/ex_docmd.c:635
    #14 0x5635318e1439 in f_assert_fails /srv/git/vim/src/testing.c:624
    #15 0x563530fd233d in call_internal_func_by_idx /srv/git/vim/src/evalfunc.c:3509
    #16 0x563531a6566c in call_bfunc /srv/git/vim/src/vim9execute.c:1387
    #17 0x563531a96f22 in exec_instructions /srv/git/vim/src/vim9execute.c:4879
    #18 0x563531ab8fdd in call_def_function /srv/git/vim/src/vim9execute.c:6881
    #19 0x5635319a5198 in call_user_func /srv/git/vim/src/userfunc.c:3050
    #20 0x5635319ab265 in call_user_func_check /srv/git/vim/src/userfunc.c:3485
    #21 0x5635319b0c6d in call_func /srv/git/vim/src/userfunc.c:4158
    #22 0x56353199ce8f in get_func_tv /srv/git/vim/src/userfunc.c:2190
    #23 0x5635319c78c6 in ex_call_inner /srv/git/vim/src/userfunc.c:6511
    #24 0x5635319caa73 in ex_call /srv/git/vim/src/userfunc.c:6869
    #25 0x563531096a45 in do_one_cmd /srv/git/vim/src/ex_docmd.c:2629
    #26 0x563531089877 in do_cmdline /srv/git/vim/src/ex_docmd.c:1041
    #27 0x563530fbabda in ex_execute /srv/git/vim/src/eval.c:7909
    #28 0x563531096a45 in do_one_cmd /srv/git/vim/src/ex_docmd.c:2629
    #29 0x563531089877 in do_cmdline /srv/git/vim/src/ex_docmd.c:1041
    #30 0x5635319a931b in call_user_func /srv/git/vim/src/userfunc.c:3312
    #31 0x5635319ab265 in call_user_func_check /srv/git/vim/src/userfunc.c:3485
    #32 0x5635319b0c6d in call_func /srv/git/vim/src/userfunc.c:4158
    #33 0x56353199ce8f in get_func_tv /srv/git/vim/src/userfunc.c:2190
    #34 0x5635319c78c6 in ex_call_inner /srv/git/vim/src/userfunc.c:6511
    #35 0x5635319caa73 in ex_call /srv/git/vim/src/userfunc.c:6869
    #36 0x563531096a45 in do_one_cmd /srv/git/vim/src/ex_docmd.c:2629
    #37 0x563531089877 in do_cmdline /srv/git/vim/src/ex_docmd.c:1041
    #38 0x5635316ba0d8 in do_source_ext /srv/git/vim/src/scriptfile.c:1917
    #39 0x5635316bbfc6 in do_source /srv/git/vim/src/scriptfile.c:2063
    #40 0x5635316b667b in cmd_source /srv/git/vim/src/scriptfile.c:1409
    #41 0x5635316b6731 in ex_source /srv/git/vim/src/scriptfile.c:1435
    #42 0x563531096a45 in do_one_cmd /srv/git/vim/src/ex_docmd.c:2629
    #43 0x563531089877 in do_cmdline /srv/git/vim/src/ex_docmd.c:1041
    #44 0x5635310873d7 in do_cmdline_cmd /srv/git/vim/src/ex_docmd.c:635
    #45 0x563531ceb7de in exe_commands /srv/git/vim/src/main.c:3298
    #46 0x563531cdda4f in vim_main2 /srv/git/vim/src/main.c:869
    #47 0x563531cdd0f3 in main /srv/git/vim/src/main.c:453
    #48 0x7f0871a27634  (/usr/lib/libc.so.6+0x27634) (BuildId: 2f722da304c0a508c891285e6840199c35019c8d)
    #49 0x7f0871a276e8 in __libc_start_main (/usr/lib/libc.so.6+0x276e8) (BuildId: 2f722da304c0a508c891285e6840199c35019c8d)
    #50 0x563530d66ea4 in _start (/srv/git/vim/src/vim+0x18ddea4) (BuildId: 5434e150e9dc6f7a2a8f6fb887162242c974dfae)

0x7b3870829bd0 is located 0 bytes inside of 32-byte region [0x7b3870829bd0,0x7b3870829bf0)
freed by thread T0 here:
    #0 0x7f087271f79d in free /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:51
    #1 0x563530d67f4d in vim_free /srv/git/vim/src/alloc.c:616
    #2 0x563531b245e9 in clear_type_list /srv/git/vim/src/vim9type.c:116
    #3 0x5635319f0145 in ex_class /srv/git/vim/src/vim9class.c:2724
    #4 0x563531096a45 in do_one_cmd /srv/git/vim/src/ex_docmd.c:2629
    #5 0x563531089877 in do_cmdline /srv/git/vim/src/ex_docmd.c:1041
    #6 0x5635316ba0d8 in do_source_ext /srv/git/vim/src/scriptfile.c:1917
    #7 0x5635316b6380 in cmd_source /srv/git/vim/src/scriptfile.c:1392
    #8 0x5635316b6731 in ex_source /srv/git/vim/src/scriptfile.c:1435
    #9 0x563531096a45 in do_one_cmd /srv/git/vim/src/ex_docmd.c:2629
    #10 0x563531089877 in do_cmdline /srv/git/vim/src/ex_docmd.c:1041
    #11 0x5635310873d7 in do_cmdline_cmd /srv/git/vim/src/ex_docmd.c:635
    #12 0x5635318e1439 in f_assert_fails /srv/git/vim/src/testing.c:624
    #13 0x563530fd233d in call_internal_func_by_idx /srv/git/vim/src/evalfunc.c:3509
    #14 0x563531a6566c in call_bfunc /srv/git/vim/src/vim9execute.c:1387
    #15 0x563531a96f22 in exec_instructions /srv/git/vim/src/vim9execute.c:4879
    #16 0x563531ab8fdd in call_def_function /srv/git/vim/src/vim9execute.c:6881
    #17 0x5635319a5198 in call_user_func /srv/git/vim/src/userfunc.c:3050
    #18 0x5635319ab265 in call_user_func_check /srv/git/vim/src/userfunc.c:3485
    #19 0x5635319b0c6d in call_func /srv/git/vim/src/userfunc.c:4158
    #20 0x56353199ce8f in get_func_tv /srv/git/vim/src/userfunc.c:2190
    #21 0x5635319c78c6 in ex_call_inner /srv/git/vim/src/userfunc.c:6511
    #22 0x5635319caa73 in ex_call /srv/git/vim/src/userfunc.c:6869
    #23 0x563531096a45 in do_one_cmd /srv/git/vim/src/ex_docmd.c:2629
    #24 0x563531089877 in do_cmdline /srv/git/vim/src/ex_docmd.c:1041
    #25 0x563530fbabda in ex_execute /srv/git/vim/src/eval.c:7909
    #26 0x563531096a45 in do_one_cmd /srv/git/vim/src/ex_docmd.c:2629
    #27 0x563531089877 in do_cmdline /srv/git/vim/src/ex_docmd.c:1041
    #28 0x5635319a931b in call_user_func /srv/git/vim/src/userfunc.c:3312
    #29 0x5635319ab265 in call_user_func_check /srv/git/vim/src/userfunc.c:3485

previously allocated by thread T0 here:
    #0 0x7f0872720cb5 in malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:67
    #1 0x563530d67350 in lalloc /srv/git/vim/src/alloc.c:246
    #2 0x563530d671c3 in alloc_clear /srv/git/vim/src/alloc.c:177
    #3 0x563531b22f30 in get_type_ptr /srv/git/vim/src/vim9type.c:34
    #4 0x5635319e3c27 in add_default_constructor /srv/git/vim/src/vim9class.c:1468
    #5 0x5635319ef4c8 in ex_class /srv/git/vim/src/vim9class.c:2652
    #6 0x563531096a45 in do_one_cmd /srv/git/vim/src/ex_docmd.c:2629
    #7 0x563531089877 in do_cmdline /srv/git/vim/src/ex_docmd.c:1041
    #8 0x5635316ba0d8 in do_source_ext /srv/git/vim/src/scriptfile.c:1917
    #9 0x5635316b6380 in cmd_source /srv/git/vim/src/scriptfile.c:1392
    #10 0x5635316b6731 in ex_source /srv/git/vim/src/scriptfile.c:1435
    #11 0x563531096a45 in do_one_cmd /srv/git/vim/src/ex_docmd.c:2629
    #12 0x563531089877 in do_cmdline /srv/git/vim/src/ex_docmd.c:1041
    #13 0x5635310873d7 in do_cmdline_cmd /srv/git/vim/src/ex_docmd.c:635
    #14 0x5635318e1439 in f_assert_fails /srv/git/vim/src/testing.c:624
    #15 0x563530fd233d in call_internal_func_by_idx /srv/git/vim/src/evalfunc.c:3509
    #16 0x563531a6566c in call_bfunc /srv/git/vim/src/vim9execute.c:1387
    #17 0x563531a96f22 in exec_instructions /srv/git/vim/src/vim9execute.c:4879
    #18 0x563531ab8fdd in call_def_function /srv/git/vim/src/vim9execute.c:6881
    #19 0x5635319a5198 in call_user_func /srv/git/vim/src/userfunc.c:3050
    #20 0x5635319ab265 in call_user_func_check /srv/git/vim/src/userfunc.c:3485
    #21 0x5635319b0c6d in call_func /srv/git/vim/src/userfunc.c:4158
    #22 0x56353199ce8f in get_func_tv /srv/git/vim/src/userfunc.c:2190
    #23 0x5635319c78c6 in ex_call_inner /srv/git/vim/src/userfunc.c:6511
    #24 0x5635319caa73 in ex_call /srv/git/vim/src/userfunc.c:6869
    #25 0x563531096a45 in do_one_cmd /srv/git/vim/src/ex_docmd.c:2629
    #26 0x563531089877 in do_cmdline /srv/git/vim/src/ex_docmd.c:1041
    #27 0x563530fbabda in ex_execute /srv/git/vim/src/eval.c:7909
    #28 0x563531096a45 in do_one_cmd /srv/git/vim/src/ex_docmd.c:2629
    #29 0x563531089877 in do_cmdline /srv/git/vim/src/ex_docmd.c:1041

I'm also pretty sure I saw this somewhere else before unrelated, but I couldn't find a fix for it

@64-bitman 64-bitman force-pushed the allow_staticfunc_in_classstaticvar branch 2 times, most recently from 5692202 to ed10b57 Compare December 22, 2025 00:06
@64-bitman 64-bitman force-pushed the allow_staticfunc_in_classstaticvar branch from ed10b57 to fe65485 Compare December 22, 2025 19:09
@64-bitman
Copy link
Contributor Author

I think this is ready

@chrisbra
Copy link
Member

alright thanks

@chrisbra chrisbra closed this in cbcc5ba Dec 23, 2025
chrisbra pushed a commit that referenced this pull request Dec 26, 2025
Problem:  A recent commit introduced a member variable named `class` in
          the `exarg` structure, which conflicts with the C++ keyword
          `class`. This causes compilation issues on Windows when VIM
          is compiled with OLE enabled, as "if_ole.cpp" cannot compile
          due to the keyword conflict (after v9.1.2012).
Solution: Rename the member variable of `exarg` from `class` to `ea_class`.
          (Wei Tang)

related: #18949
closes:  #19016

Signed-off-by: Wei Tang <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants