From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on ip-172-31-65-14.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00,FREEMAIL_FROM, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Received: by 2002:a05:622a:1b01:b0:343:582f:3e07 with SMTP id bb1-20020a05622a1b0100b00343582f3e07mr404597qtb.578.1660776575138; Wed, 17 Aug 2022 15:49:35 -0700 (PDT) X-Received: by 2002:a25:e209:0:b0:67c:234a:f08c with SMTP id h9-20020a25e209000000b0067c234af08cmr412393ybe.19.1660776574811; Wed, 17 Aug 2022 15:49:34 -0700 (PDT) Path: eternal-september.org!reader01.eternal-september.org!usenet.blueworldhosting.com!feed1.usenet.blueworldhosting.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Wed, 17 Aug 2022 15:49:34 -0700 (PDT) In-Reply-To: Injection-Info: google-groups.googlegroups.com; posting-host=96.241.104.184; posting-account=QF6XPQoAAABce2NyPxxDAaKdAkN6RgAf NNTP-Posting-Host: 96.241.104.184 References: User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <65ce4a65-c0f2-4e0b-861e-83cac4e34734n@googlegroups.com> Subject: Re: Adjust primitive not called on defaulted nonlimited controlled parameter, bug or feature ? From: Jere Injection-Date: Wed, 17 Aug 2022 22:49:35 +0000 Content-Type: text/plain; charset="UTF-8" X-Received-Bytes: 3263 Xref: reader01.eternal-september.org comp.lang.ada:64201 List-Id: On Wednesday, August 17, 2022 at 4:11:46 PM UTC-4, david....@adalabs.com wrote: > In the code extract below [2] Adjust primitive is not called on defaulted nonlimited controlled parameter Set. > A reproducer is available on gitlab [1] > > Seems like a bug, any feedbacks ? > > [1] > reproducer > https://gitlab.com/adalabs/reproducers/-/tree/main/adjust-not-called-on-defaulted-nonlimited-controlled-parameter > > [2] > 1 with Ada.Exceptions, > 2 Ada.Text_IO; > 3 > 4 with GNAT.OS_Lib; > 5 > 6 procedure Reproducer.Main is > 7 > 8 -- > 9 -- snippet of reproducer.ads > 10 -- ... > 11 -- type Translate_Set is private; > 12 -- Null_Set : constant Translate_Set; > 13 -- private > 14 -- type Translate_Set is new Ada.Finalization.Controlled with record > 15 -- Ref_Count : Integer_Access; > 16 -- Set : Boolean_Access; > 17 -- end record; > 18 -- Null_Set : constant Translate_Set := (Ada.Finalization.Controlled with null, null); > 19 -- ... > 20 -- > 21 > 22 procedure Process (Set : Translate_Set := Null_Set) > 23 is > 24 Content : constant String := Parse (Filename => "Process", > 25 Translations => Set); > 26 begin > 27 Ada.Text_IO.Put_Line (Content); > 28 end Process; > 29 begin > 30 Process; > 31 -- Ok, Initialize (Set) is not called because default value Null_Set is specified to Set (7.6 10/2). > 32 -- However Adjust (Set) is not called (7.6 17.8/3). > 33 -- Is it a feature or a bug ? > 34 > 35 exception > 36 when E : others => > 37 Ada.Text_IO.Put_Line ("(FF) Adjust was not called on the nonlimited controlled object Set, when parameter defaulted to Null_Set"); > 38 Ada.Text_IO.Put_Line ("(FF) " & Ada.Exceptions.Exception_Information (E)); > 39 GNAT.OS_Lib.OS_Exit (255); > 40 end Reproducer.Main; Since Translate_Set is a "by-reference type" (see section 6.2 of the RM), there isn't an assignment actually made is my guess. The default parameter notation looks like assignment, but I would hazard a guess that it doesn't mean an actual assignment is required.