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.