comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Is this a bug?
Date: Mon, 30 Dec 2019 20:41:07 +0200
Date: 2019-12-30T20:41:07+02:00	[thread overview]
Message-ID: <h6uum4F2481U1@mid.individual.net> (raw)
In-Reply-To: <1d96e0e1-7700-4947-9fcb-051a1203c703@googlegroups.com>

On 2019-12-30 19:51, Anh Vo wrote:
> On Monday, December 30, 2019 at 7:44:37 AM UTC-8, reinert wrote:
>> Hello,
>>
>> assume the following Ada procedure:
>> ------------------------------------------------------------------------------
>> with Text_IO;
>> procedure test1 is
>> package test_package is
>>   type rec1_t is tagged record
>>     a : integer := 2;
>> -- b : integer := 2;
>>   end record;
>>   function a(x : rec1_t) return integer is (3);
>>   rec1 : rec1_t;
>> end test_package;
>> begin
>>    Text_IO.Put(" test_package.rec1: " & integer'image(test_package.rec1.a));
>> end test1;
>> -------------------------------------------------------------------------------
>>
>> It gives (for mye computer):
>>
>> test_package.rec1:  2
>>
>> If I change the statement
>>
>> "a : integer := 2;"
>>
>> to
>>
>> "b : integer := 2;"
>>
>> then I get:
>>
>> test_package.rec1:  3
>>
>> Is this reasonable?  Bug?
>>
>> reinert
> 
> No, the compiler behaves correctly. In fact, if tagged record is
> replaced by record, the latter case will be rejected.

Yes.

When rec1_t is tagged, the "selected component" text 
"test_package.rec1.a" could refer either to the rec1_t-component "a" or 
to the subprogram (function) "a". In RM 4.1.3(9.1/2) and RM 
4.1.3(9.2/3), the latter case is available only under the condition that 
the tagged record type (rec1_t) does not have a (visible) component with 
the name "a". This means that the ambiguity is resolved in favour of the 
component "a", which has the value 2.

One could ask, why is such an ambiguity not rejected (made illegal)? 
Probably because such an illegality rule would have made many illegal 
many Ada programs that were legal before the introduction of the 
"object.operation" syntax for tagged-record objects.

If this is a problem for you, you might check if your compiler has an 
option to warn about such cases, or if AdaControl can do the same.

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
       .      @       .

  reply	other threads:[~2019-12-30 18:41 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-30 15:44 Is this a bug? reinert
2019-12-30 17:51 ` Anh Vo
2019-12-30 18:41   ` Niklas Holsti [this message]
2019-12-30 19:50     ` reinert
2019-12-30 20:11       ` Dmitry A. Kazakov
2019-12-30 23:16     ` Randy Brukardt
2019-12-31 19:40       ` Optikos
2019-12-31 21:50         ` Randy Brukardt
2020-01-02  9:34           ` Dmitry A. Kazakov
2020-01-03  7:26             ` reinert
2020-01-03  7:35             ` reinert
2020-01-03  8:37               ` Dmitry A. Kazakov
2020-01-04  0:42                 ` Randy Brukardt
2020-01-05 13:32                   ` reinert
2020-01-06 10:43                     ` J-P. Rosen
2020-01-06 12:19                       ` Tero Koskinen
2020-01-17  9:54                 ` reinert
2020-01-17 10:08                   ` Dmitry A. Kazakov
2020-01-17 22:14                   ` Randy Brukardt
2019-12-31  6:08     ` J-P. Rosen
  -- strict thread matches above, loose matches on Subject: below --
2004-09-23  0:52 Wojtek Narczynski
2004-09-23  8:35 ` Wojtek Narczynski
2004-09-23 14:52   ` Nick Roberts
2004-09-23 22:26     ` Brian May
2004-09-24  0:28       ` Stephen Leake
2004-09-24  0:57         ` Jeffrey Carter
2004-09-24 12:47         ` Wojtek Narczynski
2004-09-25  0:17           ` Brian May
2004-09-24 12:37       ` Wojtek Narczynski
2004-09-23 11:27 ` Jeff C r e e.m
2004-09-24  0:30   ` Stephen Leake
2004-09-24  1:49     ` Jeff C r e e.m
2004-09-25 12:59       ` Stephen Leake
2004-10-04 16:36         ` Warren W. Gay VE3WWG
replies disabled

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