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.
next prev parent 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