comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Did I find a (nearly-)gotcha here?
Date: Sat, 13 Nov 2021 10:52:26 +0200	[thread overview]
Message-ID: <iv9cmaFecccU1@mid.individual.net> (raw)
In-Reply-To: <29091147-1b81-4a3b-a646-c6a6d1ebe4ean@googlegroups.com>

On 2021-11-13 9:46, reinert wrote:
> Hello,
> 
> Assume the following program:
> 
> with Text_Io; use Text_Io;
> procedure test2 is
>     procedure test_a(ok :    out Boolean) is
>     begin
>        if false then
>           ok := true;
>        end if;
>     end test_a;
>     procedure test_b(ok : in out Boolean) is
>     begin
>        if false then
>           ok := true;
>        end if;
>     end test_b;
>     ok_a,ok_b : Boolean := true;
> begin
>    test_a(ok_a);
>    test_b(ok_b);
>    Put_Line("ok_a = " & ok_a'Image);
>    Put_Line("ok_b = " & ok_b'Image);
> end test2;
> 
> I get the following output (using GNAT Community Edition):
> 
> ok_a = FALSE
> ok_b = TRUE
> 
> As far as I understand, this is correct.


The value of ok_b is correct.

The value of ok_a is not defined by the language, I believe. The 
parameter test_a.ok is passed by copy-out (but not copy-in), and is not 
assigned a value in test_a, therefore the returned value comes from an 
uninitialized local Boolean, and is undefined.


> However, I think I remember that (some) older versions of the GNAT
> compiler gave a different result.

That may be so, but it would not be bug in GNAT. It is a programmer error.


> And does my program example reveal an unnecessary gotcha?


The gotcha is that Ada and GNAT do not detect all uses of uninitialized 
variables. That is regrettable, but it would be very expensive to detect 
them.

Note that if the "out" parameter has a constrained subtype, say Integer 
range 1 .. 10, and is not assigned a value in the subprogram, a 
Constraint_Error may be raised on return if the uninitialized value 
fails the subtype check in the copy-out. (This has happened to me, when 
I was younger and perhaps less learned.)

  reply	other threads:[~2021-11-13  8:52 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-13  7:46 Did I find a (nearly-)gotcha here? reinert
2021-11-13  8:52 ` Niklas Holsti [this message]
2021-11-13  8:53 ` Rod Kay
2021-11-14  8:25   ` G.B.
replies disabled

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