tech-toolchain archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Compiler bug or violation of strict aliasing rule?
In article <b189f531-0837-be29-9053-1f33f01ac8ca%gmail.com@localhost>,
Rin Okuyama <rokuyama.rk%gmail.com@localhost> wrote:
>For aarch64eb, GCC 9 and 10 compile this "if" block of
>tests/net/net/t_tcp.c:
>
>https://nxr.netbsd.org/xref/src/tests/net/net/t_tcp.c#141
>
> 141 if (sfamily == AF_INET6 && cfamily == AF_INET) {
> 142 ss = bs;
> 143 sin6 = (void *)&ss;
> 144 sin = (void *)&bs;
> 145 addrlen = sizeof(*sin);
> 146 #ifdef BSD4_4
> 147 sin->sin_len = sizeof(*sin);
> 148 #endif
> 149 sin->sin_family = AF_INET;
> 150 sin->sin_port = sin6->sin6_port;
> 151 sin->sin_addr.s_addr = htonl(INADDR_LOOPBACK);
> 152 }
>
>into a code, where fetch for "sin6->sin6_port" is preceding to
>structure copy "ss = bs".
>
>This is apparently not what the author of this code intended.
>
>However, I'm not sure whether this is a compiler bug, or a kind of
>violation of strict aliasing rule.
>
>Note that the emitted code is "fixed" if (1) -fno-strict-aliasing
>option is added, or (2) the attached patch is applied.
>
>Thoughts?
I'd apply the patch.
Thanks,
christos
Home |
Main Index |
Thread Index |
Old Index