News for hackers. Stuff that matters.
Re:The Strict Aliasing Situation Is Pretty Bad by haberman on Tuesday March 15, 2016 @09:44AM (#11289513)
Pretty sure it's safe! Take this program:

    typedef struct {
      int x;
    } Base;

    typedef struct {
      Base base;
      int y;
    } Derived;

    int f(Base* b, Derived* d) {
      b->x = 0;
      d->base.x = 1;
      return b->x;
    }
Notice that if we are accessing the base members of "d", we are still accessing them through a struct of type "Base" (d->base.x). If we compile this with strict aliasing, you can see the output is allowing that the two might alias (while this isn't a proof, it's a strong indication that this is aliasing-correct).

    0000000000000000 <f>:
       0:   c7 07 00 00 00 00       mov    DWORD PTR [rdi],0x0
       6:   c7 06 01 00 00 00       mov    DWORD PTR [rsi],0x1
       c:   8b 07                   mov    eax,DWORD PTR [rdi]
       e:   c3                      ret
Re:The Strict Aliasing Situation Is Pretty Bad by vc98mvco on Tuesday March 15, 2016 @09:53AM (#11289580)
It is defined.

6.5.7. An object shall have its stored value accessed only by an lvalue expression that has one of the following types:

- an aggregate or union type that includes one of the aforementioned types among its members (including, recursively, a member of a subaggregate or contained union)

This means Derived is allowed to alias Base.

Re:The Strict Aliasing Situation Is Pretty Bad by TorKlingberg on Tuesday March 15, 2016 @10:43AM (#11289946)
Thanks, this is good to know.