On Mon, 24 Apr 2006, Gevik Babakhani wrote:

I noticed the following compile warnings. Perhaps someone is interested
to know about them.

Also I was testing a gcc 4.2 snapshot (20060419) and it has a whole lot of warnings stemming from heap_getattr's isnull check:

aclchk.c:791: warning: the address of 'isNull', will always evaluate as 'true'

aclDatum = heap_getattr(tuple, Anum_pg_database_datacl, RelationGetDescr(relation), &isNull);


#define heap_getattr(tup, attnum, tupleDesc, isnull) \
( \
    AssertMacro((tup) != NULL), \
    ( \
        ((attnum) > 0) ? \
        ( \
            ((attnum) > (int) (tup)->t_data->t_natts) ? \
            ( \
                ((isnull) ? (*(isnull) = true) : (dummyret)NULL), \
                (Datum)NULL \
            ) \
            : \
                fastgetattr((tup), (attnum), (tupleDesc), (isnull)) \
        ) \
        : \
            heap_getsysattr((tup), (attnum), (tupleDesc), (isnull)) \
    ) \
)

Removing the check for (isnull) before (*(isnull) = true) as in the attached patch passes make check, but I have not looked at every heap_getattr call site to ensure it's passing a valid isnull pointer.

Kris Jurka
Index: src/include/access/heapam.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/access/heapam.h,v
retrieving revision 1.107
diff -c -r1.107 heapam.h
*** src/include/access/heapam.h 24 Mar 2006 04:32:13 -0000      1.107
--- src/include/access/heapam.h 24 Apr 2006 18:12:16 -0000
***************
*** 45,51 ****
  #define fastgetattr(tup, attnum, tupleDesc, isnull)                           
        \
  (                                                                             
                                                        \
        AssertMacro((attnum) > 0),                                              
                                \
!       ((isnull) ? (*(isnull) = false) : (dummyret)NULL),                      
        \
        HeapTupleNoNulls(tup) ?                                                 
                                \
        (                                                                       
                                                        \
                (tupleDesc)->attrs[(attnum)-1]->attcacheoff >= 0 ?              
        \
--- 45,51 ----
  #define fastgetattr(tup, attnum, tupleDesc, isnull)                           
        \
  (                                                                             
                                                        \
        AssertMacro((attnum) > 0),                                              
                                \
!       (*(isnull) = false),                                                    
                                \
        HeapTupleNoNulls(tup) ?                                                 
                                \
        (                                                                       
                                                        \
                (tupleDesc)->attrs[(attnum)-1]->attcacheoff >= 0 ?              
        \
***************
*** 61,67 ****
        (                                                                       
                                                        \
                att_isnull((attnum)-1, (tup)->t_data->t_bits) ?                 
        \
                (                                                               
                                                        \
!                       ((isnull) ? (*(isnull) = true) : (dummyret)NULL),       
        \
                        (Datum)NULL                                             
                                                \
                )                                                               
                                                        \
                :                                                               
                                                        \
--- 61,67 ----
        (                                                                       
                                                        \
                att_isnull((attnum)-1, (tup)->t_data->t_bits) ?                 
        \
                (                                                               
                                                        \
!                       (*(isnull) = true),                                     
                                        \
                        (Datum)NULL                                             
                                                \
                )                                                               
                                                        \
                :                                                               
                                                        \
***************
*** 100,106 ****
                ( \
                        ((attnum) > (int) (tup)->t_data->t_natts) ? \
                        ( \
!                               ((isnull) ? (*(isnull) = true) : 
(dummyret)NULL), \
                                (Datum)NULL \
                        ) \
                        : \
--- 100,106 ----
                ( \
                        ((attnum) > (int) (tup)->t_data->t_natts) ? \
                        ( \
!                               (*(isnull) = true), \
                                (Datum)NULL \
                        ) \
                        : \
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to