私は.NET互換のコンパイラを作成していますが、今日、非常に奇妙なバグに遭遇しました。私はフィールドゲッターをテストMissingFieldExceptionしていますが、組み込み型のフィールドのいくつかを使用することもあります。
私が困っている分野は次のとおりです。
MaxValueすべての数値のMinValueすべての数値のdouble.PositiveInfinitydouble.NegativeInfinitydouble.NaN
コードは正常にコンパイルされます。コンパイル中に、FieldInfoが検出され、対応するldsfldものが発行されます。ただし、実行フェーズでは、前述の例外がスローされます。そして、これは一部のフィールドでのみ発生します。Type.EmptyTypesコンパイルされ、期待どおりに機能します。
cscこれらのフィールドに対して発行されるILコードを調査しようとしましたが、いくつかの最適化が行われ、プログラムはフィールドを呼び出す代わりに実際の値をスタックにプッシュするだけです。これは明らかに、より効率的な方法ですが、今のところ、コンパイラをできるだけ単純に保ちたいと思います。
誰かが同様の問題に遭遇しましたか?