我有以下匿名子类型的声明:
testConstraint : Integer Range -5 .. 5;
Run Code Online (Sandbox Code Playgroud)
然后,在分配时:
testConstraint := -6;
Run Code Online (Sandbox Code Playgroud)
为什么我没有得到Constraint_Error?
额外细节:
pragma suppress问题的代码文件中没有任何语句(尽管通过文件添加了一些文件with;gprbuild使用GPS 5.0.2和GNAT Pro 6.4.2完成的-gnatf -gnatp -gnat2012 -d正如@Timur和@theMayer所说:
-gnatp抑制所有检查.
从文档:
-gnatp
此开关导致单元被编译,就像源中存在pragma Suppress(All_checks)一样.有效性检查也被消除(换句话说-gnatp也暗示-gnatVn).在存在无效数据或程序错误的情况下,使用此开关以牺牲安全性为代价来提高代码性能.
抑制所有检查是一个非常糟糕的主意.如果您已经证明不需要检查(例如使用SPARK),您可以针对特定单位执行此操作,并且您已经测量过抑制所有检查可以为您提供所需的性能改进.
解决方案是使用添加编译器标志-gnat-p(然后 - 如果满足要求 - 禁止检查单个文件).