comp.lang.ada
 help / color / mirror / Atom feed
* Compiler error (2) ?
@ 2022-09-26  6:54 reinert
  2022-09-26  8:12 ` Simon Wright
  2022-09-26  8:34 ` J-P. Rosen
  0 siblings, 2 replies; 5+ messages in thread
From: reinert @ 2022-09-26  6:54 UTC (permalink / raw)


Hello,

This must reveal a compiler error :
-------------------------------------------------------------------------------------------------------
with Ada.Text_IO;
with Ada.Containers.Vectors;
procedure test1a is
   type s_name_type is (s0, s1, s2, s3, s4, s5, s6, s7, s8, s9);
   for s_name_type use
      (S0 => 0, S1 => 1, S2 => 2, S3 => 3, S4 => 4,
       S5 => 5, S6 => 6, S7 => 7, S8 => 8, S9 => 9);
   package s_names_p is new Ada.Containers.Vectors
     (Index_Type => Positive, Element_Type => s_name_type);
   k : integer := 7;

-- n : constant integer := 7; -- uncomment this line and comment out the line below.
   n : constant integer := k; 

   s_names: constant s_names_p.Vector := [for i in 3..n => S0];
begin
   Ada.Text_IO.Put_Line(s_names'Image);
end test1a;
-------------------------------------------------------------------------------------------------------
(compiled using alire and  
package Compiler is
      for Switches ("ada") use ("-gnatwa", "-gnata", "-gnatX", "-gnatwv");
   end Compiler;
-------------------------------------------------------------------------------------------------------

Right?

reinert

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Compiler error (2) ?
  2022-09-26  6:54 Compiler error (2) ? reinert
@ 2022-09-26  8:12 ` Simon Wright
  2022-09-26  8:34 ` J-P. Rosen
  1 sibling, 0 replies; 5+ messages in thread
From: Simon Wright @ 2022-09-26  8:12 UTC (permalink / raw)


I'm not sure what compiler error you mean.

Agreed that the code as stands reports a strange issue,

    11.    S_Names: constant S_Names_P.Vector := [for I in 3..N => S0];
                                                 |
        >>> error: expected type "Standard.Integer"
        >>> error: found type "Ada.Containers.Count_Type"

which does look like a compiler error (even if it's only misreporting a
valid issue, I'm not sure).

What's more interesting is what happens if you make your suggested
change and it compiles. When you run it,

   $ ./reinert_2 

   raised CONSTRAINT_ERROR : test1a.s_names_p.Replace_Element: Index is
   out of range

Running this under the debugger, with 'catch exception',

   Catchpoint 1, CONSTRAINT_ERROR (test1a.s_names_p.Replace_Element: Index is out of range) at 0x0000000100008ae5 in test1a () at reinert_2.adb:15
   15	   s_names: constant s_names_p.Vector := [for i in 3..n => S0];

So, what's Index?

   (gdb) p index
   No definition of "index" in current context.

Looing at the backtrace,

   (gdb) bt
   [...]
   #4  0x0000000100011711 in test1a.s_names_p.replace_element (container=..., 
       index=6, new_item=s0)
       at /opt/gcc-12.1.0/lib/gcc/x86_64-apple-darwin15/12.1.0/adainclude/a-convec.adb:2522
   #5  0x0000000100008ae5 in test1a () at reinert_2.adb:15

Frame 4 is in the runtime; maybe we can see what's going on,

   (gdb) fr 4
   #4  0x0000000100011711 in test1a.s_names_p.replace_element (container=..., 
       index=6, new_item=s0)
       at /opt/gcc-12.1.0/lib/gcc/x86_64-apple-darwin15/12.1.0/adainclude/a-convec.adb:2522
   2522	         raise Constraint_Error with "Index is out of range";
   (gdb) p index
   $1 = 6

Hmm. What does the source say?

   (gdb) l
   2517	   is
   2518	   begin
   2519	      TE_Check (Container.TC);
   2520	
   2521	      if Checks and then Index > Container.Last then
   2522	         raise Constraint_Error with "Index is out of range";
   2523	      end if;
   2524	
   2525	      Container.Elements.EA (Index) := New_Item;
   2526	   end Replace_Element;

So Index (6) is more than Container.Last:

   (gdb) p container
   $2 = (elements => 0x600000008000, last => 5, tc => (busy => 0, lock => 0))
   (gdb)

6 is certainly more than 5. Where does 5 come from?

Index is Positive. We were hoping to have our container with indices
supporting values up to 7, but the first index of a container has to be
Index_Type'First i.e. 1; the compiler has looked at the length of the
aggregate (5) and created an empty Vector s_names of that length.

Clearly you can't do slices in this context!

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Compiler error (2) ?
  2022-09-26  6:54 Compiler error (2) ? reinert
  2022-09-26  8:12 ` Simon Wright
@ 2022-09-26  8:34 ` J-P. Rosen
  2022-09-26  8:47   ` reinert
  1 sibling, 1 reply; 5+ messages in thread
From: J-P. Rosen @ 2022-09-26  8:34 UTC (permalink / raw)


Please give the exact error message, and why you think it could be a 
compiler error. Otherwise, it's hard to help...

Le 26/09/2022 à 08:54, reinert a écrit :
> Hello,
> 
> This must reveal a compiler error :
> -------------------------------------------------------------------------------------------------------
> with Ada.Text_IO;
> with Ada.Containers.Vectors;
> procedure test1a is
>     type s_name_type is (s0, s1, s2, s3, s4, s5, s6, s7, s8, s9);
>     for s_name_type use
>        (S0 => 0, S1 => 1, S2 => 2, S3 => 3, S4 => 4,
>         S5 => 5, S6 => 6, S7 => 7, S8 => 8, S9 => 9);
>     package s_names_p is new Ada.Containers.Vectors
>       (Index_Type => Positive, Element_Type => s_name_type);
>     k : integer := 7;
> 
> -- n : constant integer := 7; -- uncomment this line and comment out the line below.
>     n : constant integer := k;
> 
>     s_names: constant s_names_p.Vector := [for i in 3..n => S0];
> begin
>     Ada.Text_IO.Put_Line(s_names'Image);
> end test1a;
> -------------------------------------------------------------------------------------------------------
> (compiled using alire and
> package Compiler is
>        for Switches ("ada") use ("-gnatwa", "-gnata", "-gnatX", "-gnatwv");
>     end Compiler;
> -------------------------------------------------------------------------------------------------------
> 
> Right?
> 
> reinert

-- 
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52
https://www.adalog.fr


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Compiler error (2) ?
  2022-09-26  8:34 ` J-P. Rosen
@ 2022-09-26  8:47   ` reinert
  2022-09-26  9:59     ` reinert
  0 siblings, 1 reply; 5+ messages in thread
From: reinert @ 2022-09-26  8:47 UTC (permalink / raw)


This is what I (also) get:

test1a.adb:16:42: error: expected type "Standard.Integer"
test1a.adb:16:42: error: found type "Ada.Containers.Count_Type"

   compilation of test1a.adb failed

gprbuild: *** compilation phase failed
error: Command ["gprbuild", "-s", "-j0", "-p", "-P", "/home/reinert/test1a/test1a.gpr"] exited with code 4
error: Compilation failed.
---------------------------------------------------------------------------------------------------
**However, the following version goes through the compiler and runs 
(using "subtype n_t is Positive range 3..Positive'Last;" for)
in the package specification) - confirming what Simon says:

with Ada.Text_IO;
with Ada.Containers.Vectors;
procedure test1a is
   type s_name_type is (s0, s1, s2, s3, s4, s5, s6, s7, s8, s9);
   for s_name_type use
      (S0 => 0, S1 => 1, S2 => 2, S3 => 3, S4 => 4,
       S5 => 5, S6 => 6, S7 => 7, S8 => 8, S9 => 9);
   subtype n_t is Positive range 3..Positive'Last;
   package s_names_p is new Ada.Containers.Vectors
     (Index_Type => n_t, Element_Type => s_name_type);
   k : integer := 7;

   n : constant integer := 7; 
 --  n : constant integer := k; -- uncomment this line and comment out the line above.

   s_names: constant s_names_p.Vector := [for i in 3..n => S0];
begin
   Ada.Text_IO.Put_Line(s_names'Image);
end test1a;


reinert




mandag 26. september 2022 kl. 10:34:18 UTC+2 skrev J-P. Rosen:
> Please give the exact error message, and why you think it could be a 
> compiler error. Otherwise, it's hard to help...
> Le 26/09/2022 à 08:54, reinert a écrit : 
> > Hello, 
> > 
> > This must reveal a compiler error : 
> > ------------------------------------------------------------------------------------------------------- 
> > with Ada.Text_IO; 
> > with Ada.Containers.Vectors; 
> > procedure test1a is 
> > type s_name_type is (s0, s1, s2, s3, s4, s5, s6, s7, s8, s9); 
> > for s_name_type use 
> > (S0 => 0, S1 => 1, S2 => 2, S3 => 3, S4 => 4, 
> > S5 => 5, S6 => 6, S7 => 7, S8 => 8, S9 => 9); 
> > package s_names_p is new Ada.Containers.Vectors 
> > (Index_Type => Positive, Element_Type => s_name_type); 
> > k : integer := 7; 
> > 
> > -- n : constant integer := 7; -- uncomment this line and comment out the line below. 
> > n : constant integer := k; 
> > 
> > s_names: constant s_names_p.Vector := [for i in 3..n => S0]; 
> > begin 
> > Ada.Text_IO.Put_Line(s_names'Image); 
> > end test1a; 
> > ------------------------------------------------------------------------------------------------------- 
> > (compiled using alire and 
> > package Compiler is 
> > for Switches ("ada") use ("-gnatwa", "-gnata", "-gnatX", "-gnatwv"); 
> > end Compiler; 
> > ------------------------------------------------------------------------------------------------------- 
> > 
> > Right? 
> > 
> > reinert
> -- 
> J-P. Rosen 
> Adalog 
> 2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX 
> Tel: +33 1 45 29 21 52 
> https://www.adalog.fr

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Compiler error (2) ?
  2022-09-26  8:47   ` reinert
@ 2022-09-26  9:59     ` reinert
  0 siblings, 0 replies; 5+ messages in thread
From: reinert @ 2022-09-26  9:59 UTC (permalink / raw)


Sorry for some typos in my latest post, but the intelligent reader should understand :-)

reinert

mandag 26. september 2022 kl. 10:47:16 UTC+2 skrev reinert:
> This is what I (also) get: 
> 
> test1a.adb:16:42: error: expected type "Standard.Integer" 
> test1a.adb:16:42: error: found type "Ada.Containers.Count_Type" 
> 
> compilation of test1a.adb failed 
> 
> gprbuild: *** compilation phase failed 
> error: Command ["gprbuild", "-s", "-j0", "-p", "-P", "/home/reinert/test1a/test1a.gpr"] exited with code 4 
> error: Compilation failed. 
> --------------------------------------------------------------------------------------------------- 
> **However, the following version goes through the compiler and runs 
> (using "subtype n_t is Positive range 3..Positive'Last;" for)
> in the package specification) - confirming what Simon says: 
> 
> with Ada.Text_IO; 
> with Ada.Containers.Vectors; 
> procedure test1a is 
> type s_name_type is (s0, s1, s2, s3, s4, s5, s6, s7, s8, s9); 
> for s_name_type use 
> (S0 => 0, S1 => 1, S2 => 2, S3 => 3, S4 => 4, 
> S5 => 5, S6 => 6, S7 => 7, S8 => 8, S9 => 9);
> subtype n_t is Positive range 3..Positive'Last;
> package s_names_p is new Ada.Containers.Vectors
> (Index_Type => n_t, Element_Type => s_name_type); 
> k : integer := 7;
> n : constant integer := 7;
> -- n : constant integer := k; -- uncomment this line and comment out the line above.
> s_names: constant s_names_p.Vector := [for i in 3..n => S0]; 
> begin 
> Ada.Text_IO.Put_Line(s_names'Image); 
> end test1a;
> reinert
> mandag 26. september 2022 kl. 10:34:18 UTC+2 skrev J-P. Rosen: 
> > Please give the exact error message, and why you think it could be a 
> > compiler error. Otherwise, it's hard to help... 
> > Le 26/09/2022 à 08:54, reinert a écrit : 
> > > Hello, 
> > > 
> > > This must reveal a compiler error : 
> > > ------------------------------------------------------------------------------------------------------- 
> > > with Ada.Text_IO; 
> > > with Ada.Containers.Vectors; 
> > > procedure test1a is 
> > > type s_name_type is (s0, s1, s2, s3, s4, s5, s6, s7, s8, s9); 
> > > for s_name_type use 
> > > (S0 => 0, S1 => 1, S2 => 2, S3 => 3, S4 => 4, 
> > > S5 => 5, S6 => 6, S7 => 7, S8 => 8, S9 => 9); 
> > > package s_names_p is new Ada.Containers.Vectors 
> > > (Index_Type => Positive, Element_Type => s_name_type); 
> > > k : integer := 7; 
> > > 
> > > -- n : constant integer := 7; -- uncomment this line and comment out the line below. 
> > > n : constant integer := k; 
> > > 
> > > s_names: constant s_names_p.Vector := [for i in 3..n => S0]; 
> > > begin 
> > > Ada.Text_IO.Put_Line(s_names'Image); 
> > > end test1a; 
> > > ------------------------------------------------------------------------------------------------------- 
> > > (compiled using alire and 
> > > package Compiler is 
> > > for Switches ("ada") use ("-gnatwa", "-gnata", "-gnatX", "-gnatwv"); 
> > > end Compiler; 
> > > ------------------------------------------------------------------------------------------------------- 
> > > 
> > > Right? 
> > > 
> > > reinert 
> > -- 
> > J-P. Rosen 
> > Adalog 
> > 2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX 
> > Tel: +33 1 45 29 21 52 
> > https://www.adalog.fr

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-09-26  9:59 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-26  6:54 Compiler error (2) ? reinert
2022-09-26  8:12 ` Simon Wright
2022-09-26  8:34 ` J-P. Rosen
2022-09-26  8:47   ` reinert
2022-09-26  9:59     ` reinert

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox