Consider the following example source code.
struct foo {
        short f1;
        short f2;
        int   f3;
} *fp;
struct bar {
        int b1;
        int b2;
} *bp;
union moo {
        struct foo u_f;
        struct bar u_b;
} u;The compiler’s assumptions based on various alias levels are the following:
If this example is compiled with the -xalias_level=weak option, fp->f3 and bp->b2 can alias each other.
If this example is compiled with the -xalias_level=layout option, no fields can alias each other.
If this example is compiled with the -xalias_level=strict option, fp->f3 and bp->b2 can alias each other.
If this example is compiled with the -xalias_level=std option, no fields can alias each other.