Thread

  1. 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.
    
    
    
    
    
  2. 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
    
    
    
  3. 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
    
  4. 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