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.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=unavailable autolearn_force=no version=3.4.4 X-Received: by 2002:a24:2c4d:: with SMTP id i74mr8848641iti.12.1545321540968; Thu, 20 Dec 2018 07:59:00 -0800 (PST) X-Received: by 2002:a9d:bd5:: with SMTP id 79mr546867oth.7.1545321540882; Thu, 20 Dec 2018 07:59:00 -0800 (PST) Path: eternal-september.org!reader01.eternal-september.org!feeder.eternal-september.org!news.gegeweb.eu!gegeweb.org!usenet-fr.net!proxad.net!feeder1-2.proxad.net!209.85.166.215.MISMATCH!k10no40091itk.0!news-out.google.com!v141ni107ita.0!nntp.google.com!q69no40054itb.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Thu, 20 Dec 2018 07:59:00 -0800 (PST) Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=98.118.241.43; posting-account=QF6XPQoAAABce2NyPxxDAaKdAkN6RgAf NNTP-Posting-Host: 98.118.241.43 User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: Subject: Potential Coextension Bug in GNAT From: Jere Injection-Date: Thu, 20 Dec 2018 15:59:00 +0000 Content-Type: text/plain; charset="UTF-8" Xref: reader01.eternal-september.org comp.lang.ada:55084 Date: 2018-12-20T07:59:00-08:00 List-Id: I was messing around and trying to learn coextensions and I came across some counter intuitive functionality. If I directly initialize one via an aggregate, it works fine. However, if I initialize through a constructing function, it seems to treat the access discriminant as a normal access type and finalizes it at the end of the program instead of when the object leaves scope. I don't fully understand them yet and there isn't much on them listed in the RM but one section (at least according to the index)[1]. That one section does indicate that initialization via a function should be valid however, so maybe I am back to I am doing it wrong or potentially a GNAT bug. I'm using GNAT 7.1.1 Here is my test program **************************************************** with Ada.Text_IO; use Ada.Text_IO; with Ada.Finalization; use Ada.Finalization; procedure Hello is type Thing_1 is new Limited_Controlled with null record; overriding procedure Finalize(Self : in out Thing_1) is begin Put_Line("Finalize Thing_1"); end Finalize; type Thing_2 (Other : not null access Thing_1) is limited null record; procedure Test_Coextension_1 is The_Thing : Thing_2(new Thing_1); begin Put_Line("Coextenson directly initialized"); end Test_Coextension_1; function Make_Thing_2 return Thing_2 is begin return (Other => new Thing_1); end Make_Thing_2; procedure Test_Coextension_2 is The_Thing : Thing_2 := Make_Thing_2; begin Put_Line("Coextension initialized through build in place"); end Test_Coextension_2; begin Test_Coextension_1; Test_Coextension_2; Put_Line("Test Finished"); end Hello; **************************************************** Any thoughts? [1] Ada 2012 tc1 RM 3.10.2(14.4/3) - http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-3-10-2.html#I2301