Re: Large writable variables

Robert Haas <robertmhaas@gmail.com>

From: Robert Haas <robertmhaas@gmail.com>
To: Andres Freund <andres@anarazel.de>
Cc: "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>, Thomas Munro <thomas.munro@enterprisedb.com>
Date: 2018-10-16T16:41:44Z
Lists: pgsql-hackers
On Tue, Oct 16, 2018 at 12:26 PM Andres Freund <andres@anarazel.de> wrote:
> /*
>  * Macro that allows to cast constness away from a variable, but doesn't
>  * allow changing the underlying type.  Enforcement of the latter
>  * currently only works for gcc like compilers.
>  *
>  * Please note IT IS NOT SAFE to cast constness away if the variable will ever
>  * be modified (it would be undefined behaviour). Doing so anyway can cause
>  * compiler misoptimizations or runtime crashes (modifying readonly memory).
>  * It is only safe to use when the the variabble will not be modified, but API
>  * design or language restrictions prevent you from declaring that
>  * (e.g. because a function returns both const and non-const variables).
>  */

"variabble" is a little too rich in "b"s.

In terms of a function that returns both const and non-const
variables, it seems a bit sketchy that the caller would know what the
function is doing in particular cases and make decisions based on it,
but maybe that's just how life is.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


Commits

  1. Apply unconstify() in more places

  2. Improve unconstify() documentation

  3. Drop const cast from dlsym() calls

  4. Const-ify a few more large static tables.

  5. Improve tzparse's handling of TZDEFRULES ("posixrules") zone data.

  6. Avoid statically allocating statement cache in ecpglib/prepare.c.

  7. Reorder FmgrBuiltin members, saving 25% in size.

  8. Add macro to cast away const without allowing changes to underlying type.

  9. Mark constantly allocated dest receiver as const.

  10. Avoid statically allocating formatting.c's format string caches.

  11. Correct constness of system attributes in heap.c & prerequisites.

  12. Avoid statically allocating gmtsub()'s timezone workspace.

  13. Correct constness of a few variables.

  14. Move the replication lag tracker into heap memory.