From: | Andres Freund <andres(at)anarazel(dot)de> |
---|---|
To: | Heikki Linnakangas <hlinnaka(at)iki(dot)fi> |
Cc: | Stephen Frost <sfrost(at)snowman(dot)net>, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: Warnings around booleans |
Date: | 2015-08-13 11:41:54 |
Message-ID: | 20150813114154.GB8988@awork2.anarazel.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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(at)anarazel(dot)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 expression is 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 incompatible pointer 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
From | Date | Subject | |
---|---|---|---|
Next Message | Heikki Linnakangas | 2015-08-13 11:50:06 | Re: Warnings around booleans |
Previous Message | Andres Freund | 2015-08-13 11:29:17 | Re: Warnings around booleans |