On 2016-05-17 19:05, Tom Lane wrote:
> Michael Paquier <michael.paquier@gmail.com> writes:
>> On Tue, May 17, 2016 at 4:40 AM, Piotr Stefaniak
>> <postgres@piotr-stefaniak.me> wrote:
>> - toc_bytes = offsetof(shm_toc, toc_entry) +nentry * sizeof(shm_toc_entry)
>> + toc_bytes = offsetof(shm_toc, toc_entry) + nentry * sizeof(shm_toc_entry)
>> + allocated_bytes;
>
>> I don't recall the exact reason, but this is intentional style
>> (memories from a patchwork with Tom).
>
> Well, it's not so much intentional as that pgindent will make it look like
> that no matter what you do --- it's got some weird interaction with
> sizeof, offsetof, and typedef names versus operators later on the same
> line. I'd call that a pgindent bug myself, but have no particular desire
> to try to fix it.
From my understanding, it's because pg_bsd_indent thinks that
"(shm_toc)" is a cast since shm_toc is a keyword (type alias fetched
from the "list of typedefs" file in this case, to be precise), forcing
the "+" to be a unary operator instead of binary.
One easy way to work around this bug is putting shm_toc into its own
parentheses but I'd prefer dropping this particular fix from my
"cosmetic changes" patch until pg_bsd_indent is fixed.
I may come up with a possible fix for this bug, but don't hold your breath.