From: Maciej Sobczak <see.my.homepage@gmail.com>
Subject: SPARK internal error?
Date: Tue, 3 Mar 2015 01:54:06 -0800 (PST)
Date: 2015-03-03T01:54:06-08:00 [thread overview]
Message-ID: <851b7d3c-4ac3-4fba-852d-c2975050da74@googlegroups.com> (raw)
As a continuation of my previous post, here is the complete package with the array sorting exercise (not sure if it's correct):
Package spec:
pragma SPARK_Mode;
package My_Package is
type Index is range 1 .. 10;
type My_Array is array (Index range <>) of Integer;
procedure Find_Min (A : in My_Array; I : out Index)
with Pre => A'First <= A'Last,
Post =>
(I in A'Range and
(for all J in A'Range =>
A (I) <= A (J)));
procedure Min_To_Left (A : in out My_Array)
with Pre => A'First <= A'Last,
Post =>
(for all I in A'Range => A (A'First) <= A (I));
procedure Sort (A : in out My_Array)
with Pre => A'First <= A'Last,
Post =>
(for all I in A'Range =>
(for all J in I .. A'Last =>
A (I) <= A (J)));
end My_Package;
Package body:
pragma SPARK_Mode;
package body My_Package is
procedure Find_Min (A : in My_Array; I : out Index) is
Last_Min : Integer;
begin
I := A'First;
Last_Min := A (A'First);
for J in A'First + 1 .. A'Last loop
if A (J) < Last_Min then
I := J;
Last_Min := A (J);
end if;
pragma Loop_Invariant
(for all K in A'First .. J =>
I in A'First .. J and Last_Min = A (I) and Last_Min <= A (K));
end loop;
end Find_Min;
procedure Min_To_Left (A : in out My_Array) is
I : Index;
Tmp : Integer;
begin
Find_Min (A, I);
Tmp := A (A'First);
A (A'First) := A (I);
A (I) := Tmp;
end Min_To_Left;
procedure Sort (A : in out My_Array) is
begin
for I in A'Range loop
Min_To_Left (A (I .. A'Last));
pragma Loop_Invariant
(for all J in I .. A'Last =>
A (I) <= A (J));
end loop;
end Sort;
end My_Package;
GNATprove says:
C:\maciej\temp\spark>gnatprove -Ptest -q
Internal error:
File "C:\maciej\temp\spark\gnatprove\my_package\..\my_package.mlw", line 2094, characters 208-235:
This term has type tindexB, but is expected to have type int.
Aborting.
gprbuild: *** compilation phase failed
gnatprove: error during generation and proof of VCs, aborting.
The my_package.mlw file has explicit content and is unappropriate for Usenet publication. ;-)
Can you reproduce it? Is it a bug in the toolset?
How can I work around it?
--
Maciej Sobczak * http://www.inspirel.com/
next reply other threads:[~2015-03-03 9:54 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-03 9:54 Maciej Sobczak [this message]
2015-03-03 12:17 ` SPARK internal error? G.B.
2015-03-03 12:58 ` G.B.
2015-03-03 15:33 ` Maciej Sobczak
2015-03-04 8:05 ` Georg Bauhaus
2015-03-04 14:47 ` joakim.strandberg
2015-03-04 22:42 ` Peter Chapin
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox