On 26 May 2013 21:01, Lee Thomas wrote: > On 2013-05-26 08:00, Václav Zeman wrote: >> >> On 05/25/2013 10:27 PM, Lee Thomas wrote: >>> >>> + lp = (const unsigned long *)((uintptr_t)str & ~LONGPTR_MASK); >>> + va = (*lp - mask01); >>> + vb = ((~*lp) & mask80); >> >> I do not think that this correct C. This is type punning violating the >> rules of the language. > > > Hello Václav, > > 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 => UB => even though it seems to work in this instance, you are just lucky the UB is actually doing what you expect.
-- VZ _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"