次の例のソースコードを考えてみましょう。
struct bar;
struct foo {
struct foo *ffp;
struct bar *fbp;
} *fp;
struct bar {
struct bar *bbp;
long b2;
} *bp;さまざまな別名レベルに基づくコンパイラの仮定を、次に示します。
この例が -xalias_level=weak オプションでコンパイルされる場合、fp->ffp および bp->bbp だけが相互に別名設定できます。
この例が -xalias_level=layout オプションでコンパイルされる場合、fp->ffp および bp->bbp だけが相互に別名設定できます。
この例が -xalias_level=strict オプションでコンパイルされる場合、フィールドは別名設定できません。タグが削除されたあとも、2 つの struct の型が異なるからです。
この例が -xalias_level=std オプションでコンパイルされる場合、フィールドは別名設定できません。2 つの型とタグが同じではないからです。