| may_alias

Previous | Specifying Attributes of Types | Next

Accesses to objects with types with this attribute are not subjected to type-based alias analysis, but are instead assumed to be able to alias any other type of objects, just like the `char` type. See '-fstrict-aliasing' for more information on aliasing issues.
Example of use:

    typedef short __attribute__((__may_alias__)) short_a;

    void _main (void)
    {
      long a = 0x12345678;
      short_a *b = (short_a *) &a;

      b[1] = 0;

      if (a == 0x12345678)
        abort();

      /* ... */
    }

If you replaced `short_a` with `short` in the variable declaration, the above program would abort when compiled with '-fstrict-aliasing', which is on by default at '-O2' or above in recent GCC versions.