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;
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 ?
On 2022-08-17 22:11, David SAUVAGE 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 ?
Adjust is called on assignment. Your code does no assignments.
Adjust is called on assignment. Your code does no assignments.
Right. A default parameter that is an object (as in this case) is simply passed to the subprogram, so there is no assignment when that happens, and thus no Adjust.
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 374 |
Nodes: | 16 (2 / 14) |
Uptime: | 128:50:12 |
Calls: | 7,955 |
Files: | 13,008 |
Messages: | 5,812,799 |