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 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!feeder.eternal-september.org!nntp-feed.chiark.greenend.org.uk!ewrotcd!newsfeed.xs3.de!io.xs3.de!news.jacob-sparre.dk!franka.jacob-sparre.dk!pnx.dk!.POSTED.rrsoftware.com!not-for-mail From: "Randy Brukardt" Newsgroups: comp.lang.ada Subject: Re: Default_Storage_Pool Date: Thu, 22 Feb 2018 18:06:10 -0600 Organization: JSA Research & Innovation Message-ID: References: <74cfbf22-7082-4a43-aef9-6a55a049fe61@googlegroups.com> <86a8a87c-72ca-4718-a2a1-11ee07d66fa8@googlegroups.com> Injection-Date: Fri, 23 Feb 2018 00:06:10 -0000 (UTC) Injection-Info: franka.jacob-sparre.dk; posting-host="rrsoftware.com:24.196.82.226"; logging-data="30467"; mail-complaints-to="news@jacob-sparre.dk" X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.5931 X-RFC2646: Format=Flowed; Original X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.7246 Xref: reader02.eternal-september.org comp.lang.ada:50580 Date: 2018-02-22T18:06:10-06:00 List-Id: I think the assignment to Janky should raise Program_Error, as it can take an object of any lifetime that is *longer* than itself. RM 3.10.2(13.3/4) says this explicitly "...; accessibility checks ensure that this is never deeper than that of the declaration of the stand-alone object". Trying to figure out precisely what check this is talking about is hard, however (the AARM is supposed to explain that part as it is claimed to follow from other rules -- but it doesn't). I'm not going to try to work that out in detail (it's also possible that it is supposed to be illegal). Randy. wrote in message news:86a8a87c-72ca-4718-a2a1-11ee07d66fa8@googlegroups.com... On Wednesday, February 21, 2018 at 8:14:03 PM UTC-5, Randy Brukardt wrote: > Default_Storage_Pool only has an effect when an access type is declared > (not > when it is used). Thus the allocators for the component of type T should > use > Pool_1 regardless of what the Default_Storage_Pool is when the allocator > is > written. > > But I'd expect the local anonymous access allocator to use Pool_2. I don't > see any reason to use some other pool in this case - 13.11.3(6-6.3/4) is > pretty clear about this, and the rules specifically were designed so that > it > would apply to anonymous access types. > > Thus, this appears to be a bug, but I also fail to see any use for it (the > anonymous access type having to disappear long before anyone can used the > return value), so I would probably not give it much priority if it was > reported to me. (Of course, a fuller example could cause me to change my > mind on that.) > > Randy. Thank you, that was what I thought it should do. I had no legitimate use case, I was just trying to tease out counter-examples to confirm my understanding. I claim no in-depth comprehension, but because of either subsequent bugs or perhaps 2012 changes to AATs (or perhaps legitimately), GNAT also takes this: package body O is janky : access Integer; function F return T is begin return Result : T do declare pragma Default_Storage_Pool(Result.pool_2); p2 : access Integer; begin p2 := new integer'(42); janky := p2; --legal? end; end return; end F; end; When does janky become a dangling pointer? Surely if the default pool is local to F (because the entire pool goes away after F ends), never if the default pool is pool_1 (since it has the same lifetime as janky), and 'possibly' if it's contained within Result.pool_2 (since it depends on where the client has creates the result). GNAT accepts all three variations (well, subject to the aforementioned bug presumably making case 3 the same as 1) and raises no exceptions for any of them. Thank you for the continued explanations -sb