Hi
I see some valgrind errors when using the ":python" command
with Vim-7.2.351 on Linux. It happens when using the Python lib
from Ubuntu-9.10 packages. I then downloaded Python-2.6.4 sources
from http://www.python.org/download/ and compiled Python myself
with -O0 -g to have symbols in stack trace.
Doing the following for example gives valgrind errors:
$ cd vim
$ ./configure --with-features=huge \
--enable-pythoninterp \
--with-python-config-dir=/usr/local/lib/python2.6/config
$ cd src
$ valgrind --num-callers=50 \
--log-file=vg.log \
./vim -u NONE -U NONE -c ':python a=0' -c ':q'
... and 'vg.log' contains errors, see:
http://dominique.pelle.free.fr/valgrind-errors-vim7.2.351-python2.6.4.txt
I'm not sure whether the bug is in Python library or in Vim.
Unfortunately, some stack traces look wrong: unrolling the stack
seems to loop so it's difficult to understand where is the problem.
I also see compilation warnings when compiling vim/src/if_python.c:
if_python.c:759: warning: missing initializer
if_python.c:759: warning: (near initialization for ‘OutputType.tp_getattro’)
if_python.c:1457: warning: missing initializer
if_python.c:1457: warning: (near initialization for ‘BufferAsSeq.sq_contains’)
if_python.c:1480: warning: missing initializer
if_python.c:1480: warning: (near initialization for ‘BufferType.tp_getattro’)
if_python.c:1699: warning: missing initializer
if_python.c:1699: warning: (near initialization for ‘RangeAsSeq.sq_contains’)
if_python.c:1722: warning: missing initializer
if_python.c:1722: warning: (near initialization for ‘RangeType.tp_getattro’)
if_python.c:1873: warning: missing initializer
if_python.c:1873: warning: (near initialization for ‘BufListAsSeq.sq_contains’)
if_python.c:1896: warning: missing initializer
if_python.c:1896: warning: (near initialization for ‘BufListType.tp_getattro’)
if_python.c:1960: warning: missing initializer
if_python.c:1960: warning: (near initialization for ‘WindowType.tp_getattro’)
if_python.c:2195: warning: missing initializer
if_python.c:2195: warning: (near initialization for ‘WinListAsSeq.sq_contains’)
if_python.c:2218: warning: missing initializer
if_python.c:2218: warning: (near initialization for ‘WinListType.tp_getattro’)
if_python.c:2280: warning: missing initializer
if_python.c:2280: warning: (near initialization for ‘CurrentType.tp_getattro’)
Mismatch happens in 2 structs:
- PyTypeObject (at lines 759, 1480, 1722, 1896, 1960, 2218, 2280)
- PySequenceMethods (at lines 1457, 1699, 1873, 2195)
The number of fields in structures do not match. For example, 7 fields
are initialized in a 'PySequenceMethods' struct in if_python.c, but I
see 10 fields in python2.6/object.h.
vim/src/if_python.c:
1449 static PySequenceMethods BufferAsSeq = {
1450 (PyInquiry) BufferLength, /* sq_length, len(x) */
1451 (binaryfunc) 0, /* BufferConcat, */ /*
sq_concat, x+y */
1452 (PyIntArgFunc) 0, /* BufferRepeat, */ /*
sq_repeat, x*n */
1453 (PyIntArgFunc) BufferItem, /* sq_item, x[i] */
1454 (PyIntIntArgFunc) BufferSlice, /* sq_slice, x[i:j] */
1455 (PyIntObjArgProc) BufferAssItem, /* sq_ass_item, x[i]=v */
1456 (PyIntIntObjArgProc) BufferAssSlice, /*
sq_ass_slice, x[i:j]=v */
1457 };
/usr/local/include/python2.6/object.h:
273 typedef struct {
274 lenfunc sq_length;
275 binaryfunc sq_concat;
276 ssizeargfunc sq_repeat;
277 ssizeargfunc sq_item;
278 ssizessizeargfunc sq_slice;
279 ssizeobjargproc sq_ass_item;
280 ssizessizeobjargproc sq_ass_slice;
281 objobjproc sq_contains;
282 /* Added in release 2.0 */
283 binaryfunc sq_inplace_concat;
284 ssizeargfunc sq_inplace_repeat;
285 } PySequenceMethods;
C partial initialization of struct will initialize remaining
fields to 0, but is it correct here?
I assume Vim is meant to work with Python-2.6.4, but Vim help
files do not mention Python-2.6 at all.
Cheers
-- Dominique
--
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php