Thread
-
ilist.h fails cpluspluscheck
Peter Eisentraut <peter_e@gmx.net> — 2012-11-27T04:55:21Z
In file included from ./src/include/utils/catcache.h:25:0, from /tmp/cpluspluscheck.bt8VZr/test.cpp:3: src/include/lib/ilist.h: In function ‘dlist_node* dlist_head_node(dlist_head*)’: src/include/lib/ilist.h:470:39: error: invalid conversion from ‘void*’ to ‘dlist_node*’ [-fpermissive] src/include/lib/ilist.h: In function ‘dlist_node* dlist_tail_node(dlist_head*)’: src/include/lib/ilist.h:487:39: error: invalid conversion from ‘void*’ to ‘dlist_node*’ [-fpermissive] In file included from ./src/include/utils/catcache.h:25:0, from /tmp/cpluspluscheck.bt8VZr/test.cpp:3: src/include/lib/ilist.h: In function ‘slist_node* slist_head_node(slist_head*)’: src/include/lib/ilist.h:680:39: error: invalid conversion from ‘void*’ to ‘slist_node*’ [-fpermissive] In file included from /tmp/cpluspluscheck.bt8VZr/test.cpp:3:0: ./src/include/lib/ilist.h: In function ‘dlist_node* dlist_head_node(dlist_head*)’: ./src/include/lib/ilist.h:470:39: error: invalid conversion from ‘void*’ to ‘dlist_node*’ [-fpermissive] ./src/include/lib/ilist.h: In function ‘dlist_node* dlist_tail_node(dlist_head*)’: ./src/include/lib/ilist.h:487:39: error: invalid conversion from ‘void*’ to ‘dlist_node*’ [-fpermissive] In file included from /tmp/cpluspluscheck.bt8VZr/test.cpp:3:0: ./src/include/lib/ilist.h: In function ‘slist_node* slist_head_node(slist_head*)’: ./src/include/lib/ilist.h:680:39: error: invalid conversion from ‘void*’ to ‘slist_node*’ [-fpermissive] Maybe some ifndef __cplusplus would help. -
Re: ilist.h fails cpluspluscheck
Tom Lane <tgl@sss.pgh.pa.us> — 2012-11-27T06:14:27Z
Peter Eisentraut <peter_e@gmx.net> writes: > In file included from ./src/include/utils/catcache.h:25:0, > from /tmp/cpluspluscheck.bt8VZr/test.cpp:3: > src/include/lib/ilist.h: In function dlist_node* dlist_head_node(dlist_head*): > src/include/lib/ilist.h:470:39: error: invalid conversion from void* to dlist_node* [-fpermissive] > Maybe some ifndef __cplusplus would help. Or maybe we need to recommend use of -fpermissive? If C++ thinks casting void * to something else is illegitimate, it's basically not going to cope with most things we might try to inline in Postgres. And I don't think that saying "you don't get to call these fundamental support functions from C++" is likely to fly, so just hiding the functions won't help much. regards, tom lane
-
Re: ilist.h fails cpluspluscheck
Andres Freund <andres@2ndquadrant.com> — 2012-11-27T09:56:51Z
On 2012-11-27 01:14:27 -0500, Tom Lane wrote: > Peter Eisentraut <peter_e@gmx.net> writes: > > In file included from ./src/include/utils/catcache.h:25:0, > > from /tmp/cpluspluscheck.bt8VZr/test.cpp:3: > > src/include/lib/ilist.h: In function ‘dlist_node* dlist_head_node(dlist_head*)’: > > src/include/lib/ilist.h:470:39: error: invalid conversion from ‘void*’ to ‘dlist_node*’ [-fpermissive] > > > Maybe some ifndef __cplusplus would help. > > Or maybe we need to recommend use of -fpermissive? If C++ thinks > casting void * to something else is illegitimate, it's basically not > going to cope with most things we might try to inline in Postgres. > And I don't think that saying "you don't get to call these fundamental > support functions from C++" is likely to fly, so just hiding the > functions won't help much. Its rather easy to fix in the ilist code at least - the cases it points out are those where I took a slightly ugly shortcut to reduce some very minor code duplication... Some casts fix it, alternatively the Assert(!dlist_is_empty()); return head->head.next could be moved into [ds]list_(head|tail)_node instead of relying on the *_elemen_off support functions. Greetings, Andres -- Andres Freund http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services -
Re: ilist.h fails cpluspluscheck
Tom Lane <tgl@sss.pgh.pa.us> — 2012-11-27T16:00:11Z
Andres Freund <andres@2ndquadrant.com> writes: > On 2012-11-27 01:14:27 -0500, Tom Lane wrote: >> Peter Eisentraut <peter_e@gmx.net> writes: >>> Maybe some ifndef __cplusplus would help. > Its rather easy to fix in the ilist code at least - the cases it points > out are those where I took a slightly ugly shortcut to reduce some very > minor code duplication... > Some casts fix it, Seems reasonable, committed. I wonder if we could get a buildfarm member or two running cpluspluscheck. regards, tom lane