comp.lang.ada
 help / color / mirror / Atom feed
From: Jonas Nygren <ehsjony@ehs.ericsson.se>
To: Laurent Guerby <Laurent.Guerby@enst-bretagne.fr>
Subject: Re: Free'ing extended types
Date: 1996/04/28
Date: 1996-04-28T00:00:00+00:00	[thread overview]
Message-ID: <318369E6.17EE@ehs.ericsson.se> (raw)
In-Reply-To: 4xpw8uirui.fsf@leibniz.enst-bretagne.fr


Laurent Guerby wrote:
> 
> Jonas Nygren writes
> : I read the following in the RM on unchecked_deallocation:
> :
> : 13.11.2(16)
> :      .... The execution of a call to an instance of
> :      Unchecked_Deallocation is erroneous if the object
> :      was created other than by an allocator for an
> :      access type whose pool is Name'Storage_Pool.
> :
> : I don't quite understand what is written but have a
> : vague feeling that the code example below could be
> : labeled 'erroneous execution' by the above paragraph.
> :
> : Perhaps somebody can answer - is the following code legal:
> :
> : type a is tagged with .........;
> : type ap is access all a'class;
> :
> : procedure free is new unchecked_deallocation(a, ap);
> :
> : tybe b is new a with .........; -- a is extended
> :
> : p : ap := new b;
> :
> : free(p);
> :
> : Are 'a' and 'b' belonging to the same Name'Storage_Pool?
> :
> : /jonas
> 
>    You should ask  your favorite compiler  ;-).  In this case  I don't

Sorry, I got my example code wrong, it should have been:

	 procedure free is new unchecked_deallocation(a'Class, ap);

13.11.2(16) talks about 'erroneous execution', i.e. an error which the
compiler can/need not detect. In the example 'p' is a pointer to a'class
and when the call to free is made it actually points to an instance of
type 'b'. So the question is, could this be considered an erroneous
execution?

Laurent's compilable example:
 
 with Ada.Unchecked_Deallocation;
 procedure St is
 
    type a is tagged record X : Integer; end record;
    type ap is access all a'class;
 
    procedure free is new Ada.unchecked_deallocation(a'class, ap);
						    -- ^ changed to compile
 
    type b is new a with record
      Y : Integer; end record; -- a is extended
 
    p : ap := new b;
 
 begin
    free(p);
 end St;

> --
> --  Laurent Guerby, student at Telecom Bretagne (France), Team Ada.

/jonas




  parent reply	other threads:[~1996-04-28  0:00 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-04-26  0:00 Free'ing extended types Jonas Nygren
1996-04-26  0:00 ` Laurent Guerby
1996-04-27  0:00   ` Jerry van Dijk
1996-04-28  0:00     ` Robert Dewar
1996-04-28  0:00   ` Jonas Nygren [this message]
  -- strict thread matches above, loose matches on Subject: below --
1996-04-28  0:00 Jonas Nygren
1996-04-28  0:00 ` Robert Dewar
1996-04-29  0:00   ` Laurent Guerby
1996-04-29  0:00     ` Robert A Duff
1996-04-29  0:00       ` Robert Dewar
1996-04-29  0:00   ` Laurent Guerby
1996-04-29  0:00     ` Robert A Duff
1996-04-29  0:00   ` Jonas Nygren
1996-04-29  0:00     ` Robert A Duff
1996-04-29  0:00       ` Robert Dewar
1996-04-29  0:00         ` Robert A Duff
1996-04-29  0:00       ` Jonas Nygren
replies disabled

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