# HG changeset patch # User Bram Moolenaar # Date 1663946105 -7200 # Node ID 54e36d01847b1ca5aa4fcf15159227375daf139b # Parent a357f581ca7b03adda3f333dd1cf38e212a658be patch 9.0.0557: valgrind reports possibly leaked memory Commit: https://github.com/vim/vim/commit/259a741044812df739457e25eb5195d9c5c0e6f8 Author: Bram Moolenaar Date: Fri Sep 23 16:11:37 2022 +0100 patch 9.0.0557: valgrind reports possibly leaked memory Problem: Valgrind reports possibly leaked memory. Solution: Move the problematic test function to the "fails" test file to avoid obscuring real memory leaks. diff --git a/src/testdir/test_vim9_fails.vim b/src/testdir/test_vim9_fails.vim --- a/src/testdir/test_vim9_fails.vim +++ b/src/testdir/test_vim9_fails.vim @@ -26,3 +26,37 @@ def Test_job_info_return_type() endif enddef +" Using "idx" from a legacy global function does not work. +" This caused a crash when called from legacy context. +" This creates a dict that contains a partial that refers to the dict, causing +" valgrind to report "possibly leaked memory". +func Test_partial_call_fails() + let lines =<< trim END + vim9script + + var l = ['a', 'b', 'c'] + def Iter(container: any): any + var idx = -1 + var obj = {state: container} + def g:NextItem__(self: dict): any + ++idx + return self.state[idx] + enddef + obj.__next__ = function('g:NextItem__', [obj]) + return obj + enddef + + var it = Iter(l) + echo it.__next__() + END + call writefile(lines, 'XpartialCall', 'D') + let caught = 'no' + try + source XpartialCall + catch /E1248:/ + let caught = 'yes' + endtry + call assert_equal('yes', caught) + delfunc g:NextItem__ +endfunc + diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -3532,34 +3532,6 @@ def Test_partial_null_function() v9.CheckDefAndScriptSuccess(lines) enddef -" Using "idx" from a legacy global function does not work. -" This caused a crash when called from legacy context. -func Test_partial_call_fails() - let lines =<< trim END - vim9script - - var l = ['a', 'b', 'c'] - def Iter(container: any): any - var idx = -1 - var obj = {state: container} - def g:NextItem__(self: dict): any - ++idx - return self.state[idx] - enddef - obj.__next__ = function('g:NextItem__', [obj]) - return obj - enddef - - var it = Iter(l) - echo it.__next__() - END - call writefile(lines, 'XpartialCall', 'D') - try - source XpartialCall - catch /E1248:/ - endtry -endfunc - def Test_cmd_modifier() tab echo '0' v9.CheckDefFailure(['5tab echo 3'], 'E16:') diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -700,6 +700,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 557, +/**/ 556, /**/ 555,