Re: Warnings around booleans - Mailing list pgsql-hackers

From Andres Freund
Subject Re: Warnings around booleans
Date
Msg-id 20150813114154.GB8988@awork2.anarazel.de
Whole thread Raw
In response to Re: Warnings around booleans  (Heikki Linnakangas <hlinnaka@iki.fi>)
List pgsql-hackers
On 2015-08-13 14:28:58 +0300, Heikki Linnakangas wrote:
> On 08/12/2015 03:46 PM, Stephen Frost wrote:
> >* Andres Freund (andres@anarazel.de) wrote:
> >>On 2015-08-12 08:16:09 -0400, Stephen Frost wrote:
> >>>>1) gin stores/queries some bools as GinTernaryValue.
> >>>>
> >>>>    Part of this is easy to fix, just adjust GinScanKeyData->entryRes to
> >>>>    be a GinTernaryValue (it's actually is compared against
> >>>>    MAYBE).

That bit looks sane to you? That appears to be an actual misdeclaration
to me.

> >>>>    What I find slightly worrysome is that in gin_tsquery_consistent()
> >>>>    checkcondition_gin (returning GinTernaryValue) is passed as a
> >>>>    callback that's expected to return bool. And the field
> >>>>    checkcondition_gin is returning (GinChkVal->check[i]) actually is a
> >>>>    ternary.
> >>>
> >>>Is there a potential corruption issue from that..?
> >>
> >>I honestly don't understand the gin code well enough to answer that.
> >
> >Yeah, neither do I, so I've added Heikki.  Heikki, any idea as to the
> >impact of this?
> 
> It's harmless. gin_tsquery_consistent() places a boolean array as the
> 'check' array, and therefore checkcondition_gin will also only return TRUEs
> and FALSEs, never MAYBEs. A comment to explain why that's OK would probably
> be in order though.

Ok. As I get warnings here it seems best to add a cast when passing the
function (i.e. (bool (*) (void *, QueryOperand *)) checkcondition_gin))
and adding a comment to checkcondition_gin() explaining that it better
only return booleans?

For reference, those are the warnings.

/home/andres/src/postgresql/src/backend/access/gin/ginlogic.c: In function ‘shimTriConsistentFn’:
/home/andres/src/postgresql/src/backend/access/gin/ginlogic.c:171:24: warning: comparison of constant ‘2’ with boolean
expressionis always false [-Wbool-compare]  if (key->entryRes[i] == GIN_MAYBE)                       ^
 
/home/andres/src/postgresql/src/backend/utils/adt/tsginidx.c: In function ‘gin_tsquery_consistent’:
/home/andres/src/postgresql/src/backend/utils/adt/tsginidx.c:287:13: warning: assignment from incompatible pointer type
[-Wincompatible-pointer-types] gcv.check = check;            ^
 
/home/andres/src/postgresql/src/backend/utils/adt/tsginidx.c:294:8: warning: passing argument 4 of ‘TS_execute’ from
incompatiblepointer type [-Wincompatible-pointer-types]       checkcondition_gin);       ^
 
In file included from /home/andres/src/postgresql/src/backend/utils/adt/tsginidx.c:20:0:
/home/andres/src/postgresql/src/include/tsearch/ts_utils.h:107:13: note: expected ‘_Bool (*)(void *, QueryOperand *)
{aka_Bool (*)(void *, struct <anonymous> *)}’ but argument is of type ‘GinTernaryValue (*)(void *, QueryOperand *) {aka
char(*)(void *, struct <anonymous> *)}’extern bool TS_execute(QueryItem *curitem, void *checkval, bool calcnot,
  ^
 

Greetings,

Andres Freund



pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: Warnings around booleans
Next
From: Heikki Linnakangas
Date:
Subject: Re: Warnings around booleans