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