Re: cpluspluscheck complains about use of register

Fabien COELHO <coelho@cri.ensmp.fr>

From: Fabien COELHO <coelho@cri.ensmp.fr>
To: Andres Freund <andres@anarazel.de>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, pgsql-hackers@postgresql.org
Date: 2022-03-09T10:08:57Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Remove uses of register due to incompatibility with C++17 and up

>>> It seems we should just remove the use of register?
>>
>> I have a vague idea that it was once important to say "register" if
>> you are going to use the variable in an asm snippet that requires it
>> to be in a register.  That might be wrong, or it might be obsolete
>> even if once true.  We could try taking these out and seeing if the
>> buildfarm complains.
>
> We have several inline asm statements not using register despite using
> variables in a register (e.g. pg_atomic_compare_exchange_u32_impl()), so I
> wouldn't expect a problem with compilers we support.
>
> Should we make configure test for -Wregister? There's at least one additional
> use of register that we'd have to change (pg_regexec).

From a compilation perspective, "register" tells the compiler that you 
cannot have a pointer on a variable, i.e. it generates an error if someone 
adds something like:

    void * p = &register_variable;

Removing the "register" declaration means that such protection would be 
removed, and creating such a pointer could reduce drastically compiler 
optimization opportunities.

-- 
Fabien.