comp.lang.ada
 help / color / mirror / Atom feed
* Question about sets and expression
@ 2017-05-08 15:53 reinert
  2017-05-08 16:06 ` Robert Eachus
  2017-05-08 19:00 ` Simon Wright
  0 siblings, 2 replies; 12+ messages in thread
From: reinert @ 2017-05-08 15:53 UTC (permalink / raw)


Hi,

I did not manage to make a simple test program for this problem,
but maybe someone can give me a hint here. I start to be "blind" :-)

os is here an Ordered_Set (not empty). The first part seems OK,
but the second part is confusing (craches).

-------------------------------------------------------------------------------
-- First part (seems OK):
       Put_Line(" Here A ");

       if not os.is_empty then
          Put_Line(" Here B ");
          c := os.first_element;
       else
          Put_Line(" Here C ");
          c := (id => Cnil, others => <>);
       end if;

       Put_Line(" Here D ");

------------------------------------------------------------------------------
-- Second part (here it goes wrong):
       c := (if not os.is_empty then os.first_element 
                        else (id => Cnil, others => <>));
       Put_Line(" Here E ");
------------------------------------------------------------------------------

*  Here is an example of output from this code:

 Here A 
 Here B 
 Here D 

Exception raised
Exception name: STORAGE_ERROR
Message: s-intman.adb:139 explicit raise

reinert

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

* Re: Question about sets and expression
  2017-05-08 15:53 Question about sets and expression reinert
@ 2017-05-08 16:06 ` Robert Eachus
  2017-05-08 17:03   ` reinert
  2017-05-08 17:04   ` reinert
  2017-05-08 19:00 ` Simon Wright
  1 sibling, 2 replies; 12+ messages in thread
From: Robert Eachus @ 2017-05-08 16:06 UTC (permalink / raw)


On Monday, May 8, 2017 at 11:53:23 AM UTC-4, reinert wrote:
 
> I did not manage to make a simple test program for this problem,
> but maybe someone can give me a hint here. I start to be "blind" :-)
> 
> os is here an Ordered_Set (not empty). The first part seems OK,
> but the second part is confusing (craches).

Trying to diagnose the problem without the declarations is difficult.  I suspect
that c := (id => Cnil, others => <>);  is trying to assign an unbounded array with that others part.

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

* Re: Question about sets and expression
  2017-05-08 16:06 ` Robert Eachus
@ 2017-05-08 17:03   ` reinert
  2017-05-08 17:04   ` reinert
  1 sibling, 0 replies; 12+ messages in thread
From: reinert @ 2017-05-08 17:03 UTC (permalink / raw)


On Monday, May 8, 2017 at 6:06:52 PM UTC+2, Robert Eachus wrote:
> On Monday, May 8, 2017 at 11:53:23 AM UTC-4, reinert wrote:
>  
> > I did not manage to make a simple test program for this problem,
> > but maybe someone can give me a hint here. I start to be "blind" :-)
> > 
> > os is here an Ordered_Set (not empty). The first part seems OK,
> > but the second part is confusing (craches).
> 
> Trying to diagnose the problem without the declarations is difficult.  I suspect
> that c := (id => Cnil, others => <>);  is trying to assign an unbounded array with that others part.

OK, sorry.

c: cell_observation_t;

where simply:

   type cell_observation_t is record
      id                  : cell_names1.target_t;
      state               : cell_state_t         := live;
      r, dr               : real_vector2d        := (0.0, 0.0);
      axis                : degree_t;
      children1           : cell_names1.cell_names_sets.set := cell_names1.cell_names_sets.empty_set;
      pre_cell, next_cell : target_t             := cnil;
   end record;

"children1" is Ada.Containers.Ordered_Sets (without any defined bound):

 package cell_names_sets is new Ada.Containers.Ordered_Sets (target_t);

 "target_t" is an enumaration type.


My hoped that someone has encountered similar with expressions and could give a hint. Maybe I have destroyed the Ordered_Set somewhere...

I use GNAT under debian, updated. gnat-4.9.

reinert


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

* Re: Question about sets and expression
  2017-05-08 16:06 ` Robert Eachus
  2017-05-08 17:03   ` reinert
@ 2017-05-08 17:04   ` reinert
  1 sibling, 0 replies; 12+ messages in thread
From: reinert @ 2017-05-08 17:04 UTC (permalink / raw)


On Monday, May 8, 2017 at 6:06:52 PM UTC+2, Robert Eachus wrote:
> On Monday, May 8, 2017 at 11:53:23 AM UTC-4, reinert wrote:
>  
> > I did not manage to make a simple test program for this problem,
> > but maybe someone can give me a hint here. I start to be "blind" :-)
> > 
> > os is here an Ordered_Set (not empty). The first part seems OK,
> > but the second part is confusing (craches).
> 
> Trying to diagnose the problem without the declarations is difficult.  I suspect
> that c := (id => Cnil, others => <>);  is trying to assign an unbounded array with that others part.

OK, sorry. 

c: cell_observation_t; 

where simply: 

   type cell_observation_t is record 
      id                  : cell_names1.target_t; 
      state               : cell_state_t         := live; 
      r, dr               : real_vector2d        := (0.0, 0.0); 
      axis                : degree_t; 
      children1           : cell_names1.cell_names_sets.set := cell_names1.cell_names_sets.empty_set; 
      pre_cell, next_cell : target_t             := cnil; 
   end record; 

"children1" is Ada.Containers.Ordered_Sets (without any defined bound): 

 package cell_names_sets is new Ada.Containers.Ordered_Sets (target_t); 

 "target_t" is an enumaration type. 


I hoped that someone has encountered similar with expressions and could give a hint. Maybe I have destroyed the Ordered_Set somewhere... 

I use GNAT under debian, updated. gnat-4.9. 

reinert 


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

* Re: Question about sets and expression
  2017-05-08 15:53 Question about sets and expression reinert
  2017-05-08 16:06 ` Robert Eachus
@ 2017-05-08 19:00 ` Simon Wright
  2017-05-09  3:58   ` reinert
  1 sibling, 1 reply; 12+ messages in thread
From: Simon Wright @ 2017-05-08 19:00 UTC (permalink / raw)


If you want help, you really need to provide a Minimal, Complete and
Verifiable example[1].

[1] http://stackoverflow.com/help/mcve

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

* Re: Question about sets and expression
  2017-05-08 19:00 ` Simon Wright
@ 2017-05-09  3:58   ` reinert
  2017-05-09  5:48     ` reinert
  0 siblings, 1 reply; 12+ messages in thread
From: reinert @ 2017-05-09  3:58 UTC (permalink / raw)


On Monday, May 8, 2017 at 9:00:41 PM UTC+2, Simon Wright wrote:
> If you want help, you really need to provide a Minimal, Complete and
> Verifiable example[1].
> 
> [1] http://stackoverflow.com/help/mcve

Will try. It could help me to make it if I knew expressions is just "syntactic sugar" or not.  

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

* Re: Question about sets and expression
  2017-05-09  3:58   ` reinert
@ 2017-05-09  5:48     ` reinert
  2017-05-09  6:23       ` Niklas Holsti
                         ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: reinert @ 2017-05-09  5:48 UTC (permalink / raw)


Could anybody try this simple program below?

I get the output (debian, gnat-4.9):

--------------------------------------------------------------------------
** A: 
** B: 

raised PROGRAM_ERROR : test1b.adb:29 finalize/adjust raised exception
--------------------------------------------------------------------------
 Why "finalize/adjust raised exception" ?

reinert
https://korsnesbiocomputing.no/


with Ada.Numerics;
use  Ada.Numerics;
with Ada.Numerics.Generic_Real_Arrays;
with Ada.Containers.Ordered_Sets;

with Text_IO;use Text_IO;
procedure test1b is

   subtype real is Float;
   subtype degree_t is real range 0.0 .. 360.0;
   package gra is new Ada.Numerics.Generic_Real_Arrays (real);
   use gra;
   subtype real_vector2d is gra.real_vector (1 .. 2);
   type target_t is (cnil,C000,C001,C002,C003,C004);
   package cell_names_sets is new Ada.Containers.Ordered_Sets (target_t);

   type cell_state_t is
     (live,
      apoptosis,
      necrotic,
      dead,
      mitosis,
      mitotic_catastrophe,
      refusion,
      unknown,
      out_of_scene,
      ghost);

   type cell_observation_t is record
      id                  : target_t;
      state               : cell_state_t         := live;
      r, dr               : real_vector2d        := (0.0, 0.0);
      axis                : degree_t;
      children1           : cell_names_sets.set  := cell_names_sets.empty_set;
      pre_cell, next_cell : target_t             := cnil;
   end record;

   function "<"
     (left, right : cell_observation_t) return Boolean is
     (left.id < right.id);
   function "="
     (left, right : cell_observation_t) return Boolean is
     (left.id = right.id);

    package cell_observation_set is new Ada.Containers.Ordered_Sets
     (Element_Type => cell_observation_t);
    use cell_observation_set;

    os : cell_observation_set.set := to_set((id => C003,others => <>));
    c : cell_observation_t;
    d : cell_observation_t := (id => Cnil,others => <>);

begin

 Put_Line(" ** A: ");
 c := (if not os.is_empty then os.first_element else d);
 Put_Line(" ** B: ");
 c := (if not os.is_empty then os.first_element else (id => Cnil, others => <>));
 Put_Line(" ** C ");

end test1b;


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

* Re: Question about sets and expression
  2017-05-09  5:48     ` reinert
@ 2017-05-09  6:23       ` Niklas Holsti
  2017-05-09  6:29       ` G.B.
                         ` (2 subsequent siblings)
  3 siblings, 0 replies; 12+ messages in thread
From: Niklas Holsti @ 2017-05-09  6:23 UTC (permalink / raw)


On 17-05-09 08:48 , reinert wrote:
> Could anybody try this simple program below?
>
> I get the output (debian, gnat-4.9):
>
> --------------------------------------------------------------------------
> ** A:
> ** B:
>
> raised PROGRAM_ERROR : test1b.adb:29 finalize/adjust raised exception
> --------------------------------------------------------------------------
>  Why "finalize/adjust raised exception" ?
>

[snip program code]

On a Mac OS-X (10.8.5), GNAT GPL 2012 (20120509), options "-g 
-gnat2012", I get:

./test1b
  ** A:
  ** B:
  ** C

with no exceptions.

I haven't studied the program enough to opine on whether this is the 
correct expected result.

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
       .      @       .

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

* Re: Question about sets and expression
  2017-05-09  5:48     ` reinert
  2017-05-09  6:23       ` Niklas Holsti
@ 2017-05-09  6:29       ` G.B.
  2017-05-09  7:14         ` reinert
  2017-05-09  9:28       ` gautier_niouzes
  2017-05-09 11:15       ` Simon Wright
  3 siblings, 1 reply; 12+ messages in thread
From: G.B. @ 2017-05-09  6:29 UTC (permalink / raw)


On 09.05.17 07:48, reinert wrote:
> Could anybody try this simple program below?

$ ./test1b
  ** A:
  ** B:
  ** C
$

GNATMAKE GPL 2016 (20160515-49)

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

* Re: Question about sets and expression
  2017-05-09  6:29       ` G.B.
@ 2017-05-09  7:14         ` reinert
  0 siblings, 0 replies; 12+ messages in thread
From: reinert @ 2017-05-09  7:14 UTC (permalink / raw)


On Raspberry Pi (Raspbian up do date - which is much like debian) I get (similar to debian/gnat-4.9):

** A: 
** B: 

raised PROGRAM_ERROR : test1b.adb:29 finalize/adjust raised exception

Someone out there that also could try Raspberry Pi ?


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

* Re: Question about sets and expression
  2017-05-09  5:48     ` reinert
  2017-05-09  6:23       ` Niklas Holsti
  2017-05-09  6:29       ` G.B.
@ 2017-05-09  9:28       ` gautier_niouzes
  2017-05-09 11:15       ` Simon Wright
  3 siblings, 0 replies; 12+ messages in thread
From: gautier_niouzes @ 2017-05-09  9:28 UTC (permalink / raw)


No crash with GNAP GPL 2016 for Windows (gcc version 4.9.4 20160426 (for GNAT GPL 2016 20160515)).
When elaborating a bit:
...
begin
 Put_Line(" ** A: ");
 c1 := (if not os.is_empty then os.first_element else d);
 Put_Line(" ** B: ");
 c2 := (if not os.is_empty then os.first_element else (id => Cnil, others => <>));
 Put_Line(" ** C ");
 if c1 = (id => C003,others => <>) then
   Put_Line(" ** c1 OK ");
 end if;
 if c2 = (id => C003,others => <>) then
   Put_Line(" ** c2 OK ");
 end if;
end test1b;

I get

 ** A:
 ** B:
 ** C
 ** c1 OK
 ** c2 OK

The build command is:
gnatmake -gnato -fno-inline -fstack-check -gnatVa -gnatecdebug.pra test1b.adb

with debug.pra containing "pragma Initialize_Scalars;".

Same result with "gnatmake -f -gnatpn test1b.adb" and "gnatmake -f -gnatpn -O2 test1b.adb".

HTH
Gautier
________________________________________________
Your daily dose of buzzwords: http://cbsg.sf.net

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

* Re: Question about sets and expression
  2017-05-09  5:48     ` reinert
                         ` (2 preceding siblings ...)
  2017-05-09  9:28       ` gautier_niouzes
@ 2017-05-09 11:15       ` Simon Wright
  3 siblings, 0 replies; 12+ messages in thread
From: Simon Wright @ 2017-05-09 11:15 UTC (permalink / raw)


reinert <reinkor@gmail.com> writes:

> I get the output (debian, gnat-4.9):
>
> --------------------------------------------------------------------------
> ** A: 
> ** B: 
>
> raised PROGRAM_ERROR : test1b.adb:29 finalize/adjust raised exception
> --------------------------------------------------------------------------
>  Why "finalize/adjust raised exception" ?

I'm afraid this is a GNAT 4.9 error. On macOS Sierra,

GCC 7.1.0 : OK
GCC 6.1.0 : OK
GCC 5.2.0 : OK
GCC 4.9.1 : fails

For amusement, GDB shows that it happens at a-crbtgo.adb:539:

538	   procedure Generic_Clear (Tree : in out Tree_Type) is
539	      Root : Node_Access := Tree.Root;
540	   begin

called from a-coorse.adb:1319:

1319	      return It : constant Iterator :=
1320	        Iterator'(Limited_Controlled with
1321	                    Container => Container'Unrestricted_Access,
1322	                    Node      => null);
1323	   end Iterate;

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

end of thread, other threads:[~2017-05-09 11:15 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-08 15:53 Question about sets and expression reinert
2017-05-08 16:06 ` Robert Eachus
2017-05-08 17:03   ` reinert
2017-05-08 17:04   ` reinert
2017-05-08 19:00 ` Simon Wright
2017-05-09  3:58   ` reinert
2017-05-09  5:48     ` reinert
2017-05-09  6:23       ` Niklas Holsti
2017-05-09  6:29       ` G.B.
2017-05-09  7:14         ` reinert
2017-05-09  9:28       ` gautier_niouzes
2017-05-09 11:15       ` Simon Wright

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