Hi Peter! On 20.01.2026 10:37, Peter Eisentraut wrote: > 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.
Great change. I've ran into that multiple times and had to un-const-correct my code because of how copyObject() works. > 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 *. > > (Even MSVC supports it, if we use a slightly newer version than is on > CI. For example, the new buildfarm member unicorn would support it.) I'm not too familiar with the build system, so I let someone else review this part. > The second patch make some changes to take advantage of this improved > qualifier handling. EventTriggerCollectSimpleCommand() is a good > example: It takes a node tree and makes a copy that it keeps around for > its internal purposes, but it can't communicate via its function > signature that it promises not scribble on the passed node tree. That > is now fixed. The changes to EvenTriggerCollectSimpleCommand() look good to me. Are you planning to look at the rest of the code as well? At a quick glance there seem to be more places that can be changed in similar ways, e.g. see refresh_matview_datafill(). -- David Geier
