Sun Studio 12 Update 1: C++ ユーザーズガイド

A.2.132.2 -xipo= を使用しない内部手続き解析を行う場合

内部手続き解析では、コンパイラは、リンクステップでオブジェクトファイル群を操作しながら、プログラム全体の解析と最適化を試みます。このとき、コンパイラは、このオブジェクトファイル群に定義されているすべての foo() 関数 (またはサブルーチン) に関して次の 2 つのことを仮定します。

アプリケーションに対して仮定 1 が当てはまらない場合は、コンパイルで -xipo=2 を使わないでください。

仮定 2 が当てはまらない場合は、コンパイルで -xipo=1 および -xipo=2 を使わないでください。

1 例として、独自のバージョンの malloc() で関数 malloc() を置き換え、-xipo=2 でコンパイルするケースを考えます。その独自のコードとリンクされる malloc() を参照するライブラリのあらゆる関数は、-xipo=2 でコンパイルする必要があり、それらのオブジェクトファイルはリンクステップに所属する必要があります。システムライブラリでは、このことが不可能なことがあり、このため、独自のバージョンの malloc のコンパイルに -xipo=2 を使ってはいけません。

もう 1 つの例として、別々のソースファイルにある foo() および bar() という 2 つの外部呼び出しを含む共有ライブラリを構築するケースを考えてみましょう。また、bar() は foo() を呼び出すと仮定します。foo() が実行時に割り込みを受ける可能性がある場合、foo() および bar() のソースファイルを -xipo=1-xipo=2 でコンパイルしてはいけません。さもないと、foo() が bar() 内にインライン化され、不正な結果になる可能性があります。

関連項目

-xjobs