From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Andres Freund <andres(at)anarazel(dot)de> |
Cc: | pgsql-hackers(at)lists(dot)postgresql(dot)org, Robert Haas <robertmhaas(at)gmail(dot)com>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com> |
Subject: | Re: Pointer subtraction with a null pointer |
Date: | 2022-03-26 17:23:34 |
Message-ID: | 55128.1648315414@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
I wrote:
> Andres Freund <andres(at)anarazel(dot)de> writes:
>> On 2022-03-26 12:13:12 -0400, Tom Lane wrote:
>>> This code is old, but mylodon wasn't doing that a week ago, so
>>> Andres must've updated the compiler and/or changed its options.
>> Yep, updated it to clang 13. It's a warning present in 13, but not in 12.
> OK, that answers that.
... Actually, after looking closer, I misread what our code is doing.
These call sites are trying to set the relptr value to "null" (zero),
and AFAICS it should be allowed:
freepage.c:188:2: warning: performing pointer subtraction with a null pointer has undefined behavior [-Wnull-pointer-subtraction]
relptr_store(base, fpm->btree_root, (FreePageBtree *) NULL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../src/include/utils/relptr.h:63:59: note: expanded from macro 'relptr_store'
(rp).relptr_off = ((val) == NULL ? 0 : ((char *) (val)) - (base)))
~~~~~~~~~~~~~~~~ ^
clang is complaining about the subtraction despite it being inside
a conditional arm that cannot be reached when val is null. It's hard
to see how that isn't a flat-out compiler bug.
However, granting that it isn't going to get fixed right away,
we could replace these call sites with "relptr_store_null()",
and maybe get rid of the conditional in relptr_store().
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Andres Freund | 2022-03-26 17:27:09 | Re: Remove an unused function GetWalRcvWriteRecPtr |
Previous Message | Andres Freund | 2022-03-26 17:23:16 | Re: make MaxBackends available in _PG_init |