[master] 777e03ba9 Disable strict aliasing with gcc where vtree.h is used
Dridi Boukelmoune
dridi at varni.sh
Wed Mar 24 17:46:47 UTC 2021
On Wed, Mar 24, 2021 at 5:38 PM Nils Goroll <nils.goroll at uplex.de> wrote:
>
>
> commit 777e03ba9774bf635a972fa0561b50ff071908a9
> Author: Nils Goroll <nils.goroll at uplex.de>
> Date: Wed Mar 24 18:25:24 2021 +0100
>
> Disable strict aliasing with gcc where vtree.h is used
>
> Please replace this commit with a better solution, if you have one.
>
> e1ac59335f749b84280722425b355be344cc76e9 brought us the VRBT node
> color encoded in the lower two bits of pointers.
>
> gcc strict aliasing rules (as enabled with -O2 and higher) forbid
> aliased lvalue access as in the following macro expanded code:
>
> (*(uintptr_t *)&(parent)->entry.rbe_parent) &= ~((uintptr_t)3);
Is culprit code part of generated vtree.h functions? Or macros that we
may call directly?
> Until we have a better solution, disable strict aliasing with gcc
> for targets with any source file using vtree.h.
>
> Note that we would want to limit -fno-strict-aliasing to individual
> compliation units, but automake does not offer a simple and clean way
> to achieve this:
>
> https://www.gnu.org/software/automake/manual/html_node/Per_002dObject-Flags.html
If this is only in generated functions, we may be able to annotate
them with some kind of v_no_strict_aliasing_ attribute.
At first glance it looks like macros we call directly would be subject
to strict aliasing too.
More information about the varnish-commit
mailing list