2017-12-01 15 views
1

私は匿名のサブタイプの次の宣言をしている。後に続いてなぜAdaは制約エラーを起こさないのですか?

testConstraint : Integer Range -5 .. 5; 

、それをする場合を割り当てる:

testConstraint := -6; 

なぜ私はConstraint_Errorを得ていないのですが?

追加詳細:

  • pragma suppressステートメントは、いくつかは、with経由で追加されたファイルであるものの(問題のコードファイルではありません。
  • ビルドがGPSに5.0.2を使用してgprbuildを経由して行われ、 GNAT Proの6.4.2
  • 使用以下のフラグがあります。-gnatf -gnatp -gnat2012 -d
  • はまた.gprファイル内の「外部」から入ってくるのフラグを持っている - しかし、これらがどこにあるか私にはわからないか、どのようなこれの意味は。 @Timurと@theMayerよう
+1

どのようなコンパイラフラグとコンパイルフラグを使用していますか? https://stackoverflow.com/questions/14526945/why-does-an-ada-compiler-let-range-violations-pass-why-is-my-type-declaration-a/14527545#14527545 –

+0

これは興味深いことですgprbuildにも同じことが当てはまりますか? – theMayer

+0

引数を追加しようとしましたが効果がありませんでした。 – theMayer

答えて

6

ノート:

-gnatpは、すべてのチェックを抑制します。ドキュメントから

-gnatp

このスイッチは、ユニットがプラグマ抑制(All_checks)がソースに存在していたかのようにコンパイルされます。有効性チェック も削除されています(つまり、-gnatpは-gnatVnも意味します)。このスイッチを にすると、無効なデータやプログラムの不具合が発生した場合に、安全性を犠牲にしてコードのパフォーマンスを向上させることができます。

すべてのチェックを抑制することは本当に悪い考えです。チェックが必要でないことが証明されている場合(たとえばSPARKを使用している場合)、およびをチェックして、すべてのチェックを抑制すると必要なパフォーマンスが向上することを測定した場合、特定のユニットで実行できます。

解決策は、コンパイラフラグ-gnat-pを追加することです(要件が満たされていれば、個々のファイルのチェックを抑制します)。

関連する問題