Change copyObject() to use typeof_unqual
Peter Eisentraut <peter@eisentraut.org>
Author:
Peter Eisentraut <peter@eisentraut.org>
Date: 2026-02-04T08:22:41Z
Releases:
19 (unreleased)
Change copyObject() to use typeof_unqual Currently, when the argument of copyObject() is const-qualified, the return type is also, because the use of typeof carries over all the qualifiers. This is incorrect, since the point of copyObject() is to make a copy to mutate. But apparently no code ran into it. The new implementation uses typeof_unqual, which drops the qualifiers, making this work correctly. typeof_unqual is standardized in C23, but all recent versions of all the usual compilers support it even in non-C23 mode, at least as __typeof_unqual__. We add a configure/meson test for typeof_unqual and __typeof_unqual__ and use it if it's available, else we use the existing fallback of just returning void *. Reviewed-by: David Geier <geidav.pg@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/92f9750f-c7f6-42d8-9a4a-85a3cbe808f3%40eisentraut.org
Files
| Path | Change | +/− |
|---|---|---|
| config/c-compiler.m4 | modified | +25 −0 |
| configure | modified | +42 −0 |
| configure.ac | modified | +1 −0 |
| meson.build | modified | +24 −0 |
| src/include/nodes/nodes.h | modified | +2 −2 |
| src/include/pg_config.h.in | modified | +7 −0 |
Discussion
- Change copyObject() to use typeof_unqual 31 messages · 2026-01-20 → 2026-06-17