SPARK:gnatprove与-gnato13选项无法识别?

时间:2014-11-13 01:47:14

标签: ada spark-ada

我是Ada / SPARK的新手。我试图从这里开始学习一些教程 -

http://docs.adacore.com/spark2014-docs/html/ug/gnatprove.html

假设我正在运行此处给出的ISQRT示例(http://docs.adacore.com/spark2014-docs/html/ug/gnatprove.html#id19)。所有代码(*.ads*.adb)都捆绑为一个名为isqrt.gpr的项目,我正在运行的命令是 -

:~$ gnatprove -gnato13 -P isqrt.gpr

我得到的输出是 -

Phase 1 of 3: frame condition computation ...
Phase 2 of 3: analysis and translation to intermediate language ...
Phase 3 of 3: generation and proof of VCs ...
analyzing isqrtsubtyped, 0 checks
analyzing isqrtsubtyped.ISQRT, 13 checks
isqrtsubtyped.ads:7:31: warning: overflow check might fail
gprbuild: *** compilation phase failed
gnatprove: error during generation and proof of VCs, aborting.

教程说我需要向证明者提供一个名为-gnato13的开关,这样它就会跳过一些溢出检查。但显然这个开关是不可接受的。

任何想法?

1 个答案:

答案 0 :(得分:3)

gnatprove命令给出的'help'非常有用:

$ gnatprove --help
Usage: gnatprove -Pproj [files] [switches] [-cargs switches]
proj is a GNAT project file
files is one or more file names
-cargs switches are passed to gcc
...

并且所提及的gnatprove个切换均未-gnato13

所以正在发生的事情是你需要将交换机传递给gnatprove正在使用的编译器。

有两种方法(至少):首先,使用-cargs路线,

gnatprove -P t1q4.gpr -cargs -gnato13

或者第二,在GPR(我使用t1q4.gpr),

中设置它
project T1Q4 is
   for Source_Files use ("t1q4.ads", "t1q4.adb");
   for Object_Dir use ".build";
   package Compiler is
      for Default_Switches ("ada") use ("-gnato13");
   end Compiler;
end T1Q4;

for Object_Dir use ".build”;将中间文件隐藏在一个通常不可见的子目录中; gprbuildgnatmake知道用-p标志创建所需的目录,但是{{1没有被告知就这样做了)