Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 May 2013 10:37:40 +0200
From:      =?UTF-8?Q?V=C3=A1clav_Zeman?= <vhaisman@gmail.com>
To:        Lee Thomas <lee_thomas@aslantools.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Performance improvement to strnlen().
Message-ID:  <CAKw7uVi2oofoy=yJQiHR927oGfy74UuYFq68r=C=gUVXBXZuKw@mail.gmail.com>
In-Reply-To: <2adc4d8e7c55e92d935f61efb4c9d723@lthomas.net>
References:  <2adc4d8e7c55e92d935f61efb4c9d723@lthomas.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On 26 May 2013 21:01, Lee Thomas wrote:
> On 2013-05-26 08:00, V=C3=A1clav Zeman wrote:
>>
>> On 05/25/2013 10:27 PM, Lee Thomas wrote:
>>>
>>> +       lp =3D (const unsigned long *)((uintptr_t)str & ~LONGPTR_MASK);
>>> +       va =3D (*lp - mask01);
>>> +       vb =3D ((~*lp) & mask80);
>>
>> I do not think that this correct C. This is type punning violating the
>> rules of the language.
>
>
> Hello V=C3=A1clav,
>
> The aliasing here is safe, because there are no writes through either of =
the
> pointers, and the reads are correctly aligned.
I disagree. IANALL but AFAIK, this is simply not allowed by the
language =3D> UB =3D> even though it seems to work in this instance, you
are just lucky the UB is actually doing what you expect.

--
VZ



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAKw7uVi2oofoy=yJQiHR927oGfy74UuYFq68r=C=gUVXBXZuKw>