comp.lang.ada
 help / color / mirror / Atom feed
From: Jere <jhb.chat@gmail.com>
Subject: Re: Adjust primitive not called on defaulted nonlimited controlled parameter, bug or feature ?
Date: Wed, 17 Aug 2022 15:49:34 -0700 (PDT)	[thread overview]
Message-ID: <65ce4a65-c0f2-4e0b-861e-83cac4e34734n@googlegroups.com> (raw)
In-Reply-To: <ee312315-c9e7-435e-a985-674f952b521cn@googlegroups.com>

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.

  reply	other threads:[~2022-08-17 22:49 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-17 20:11 Adjust primitive not called on defaulted nonlimited controlled parameter, bug or feature ? David SAUVAGE
2022-08-17 22:49 ` Jere [this message]
2022-08-18  0:11 ` Jeffrey R.Carter
2022-08-18  1:23   ` Randy Brukardt
2022-08-18  4:04     ` David SAUVAGE
replies disabled

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