From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,2866100c9a2b8ce7 X-Google-Attributes: gid103376,public From: Laurent.Guerby@enst-bretagne.fr (Laurent Guerby) Subject: Re: Free'ing extended types Date: 1996/04/26 Message-ID: <4xpw8uirui.fsf@leibniz.enst-bretagne.fr>#1/1 X-Deja-AN: 151599980 distribution: world sender: guerby@leibniz.enst-bretagne.fr references: <3180F084.7285@ehs.ericsson.se> content-type: text/plain; charset=US-ASCII organization: Telecom Bretagne mime-version: 1.0 newsgroups: comp.lang.ada Date: 1996-04-26T00:00:00+00:00 List-Id: 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 think GNAT is wrong, and the error message is quite explicit. The problem is the "all" in the access type definition, making ap an access-to-variable type, see RM95-3.10(10). Of course if this was not catched by some compile-time rule, it would be something like erroneous ;-). 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, ap); type b is new a with record Y : Integer; end record; -- a is extended p : ap := new b; begin free(p); end St; guerby@leibniz$ cd ~/ada/tmp/ guerby@leibniz$ gcc -c -gnatvef st.adb GNAT Compiler Version 3.04w Copyright 1995 Free Software Foundation, Inc. Compiling: st.adb (source file time stamp: 1996-04-26 21:35:40) 7. procedure free is new Ada.unchecked_deallocation(a, ap); | >>> designated type of actual does not match that of formal "Name" 7. procedure free is new Ada.unchecked_deallocation(a, ap); | >>> instantiation abandoned 15. free(p); | >>> "free" is undefined 16 lines: 3 errors Compilation exited abnormally with code 1 at Fri Apr 26 23:35:49 -- -- Laurent Guerby, student at Telecom Bretagne (France), Team Ada. -- "Use the Source, Luke. The Source will be with you, always (GPL)." -- http://www-eleves.enst-bretagne.fr/~guerby/ (GATO Project). -- Try GNAT, the GNU Ada 95 compiler (ftp://cs.nyu.edu/pub/gnat).