From: Per Sandberg <per.sandberg@bredband.net>
Subject: Re: Compiler bug
Date: Wed, 02 Apr 2008 19:44:49 +0200
Date: 2008-04-02T19:44:49+02:00 [thread overview]
Message-ID: <1CPIj.2$sT1.0@newsfet15.ams> (raw)
In-Reply-To: <95883266-bd95-499f-a2dc-59580f2c5089@2g2000hsn.googlegroups.com>
Well it was still in AdaCore:s compiler yesterday so I took the liberty
to report it since people at my company is using the Ada2005 features in
GNAT and I want to be proactive.
/Per
Maciej Sobczak wrote:
> Consider a trivial example with composition of interfaces:
>
> with Ada.Text_IO;
>
> procedure A is
>
> package Stuff is
>
> type Base_1 is interface;
> procedure P_1 (X : in Base_1) is abstract;
>
> type Base_2 is interface;
> procedure P_2 (X : in Base_2) is abstract;
>
> type Middle is interface and Base_1 and Base_2;
>
> type Concrete is new Middle with null record;
> procedure P_1 (X : in Concrete);
> procedure P_2 (X : in Concrete);
>
> function Make_Concrete return Concrete;
>
> end Stuff;
>
> package body Stuff is
>
> procedure P_1 (X : in Concrete) is
> begin
> Ada.Text_IO.Put_Line ("Concrete.P_1");
> end P_1;
>
> procedure P_2 (X : in Concrete) is
> begin
> Ada.Text_IO.Put_Line ("Concrete.P_2");
> end P_2;
>
> function Make_Concrete return Concrete is
> C : Concrete;
> begin
> return C;
> end Make_Concrete;
>
> end Stuff;
>
> use Stuff;
>
> B_1 : Base_1'Class := Make_Concrete;
> B_2 : Base_2'Class := Make_Concrete;
>
> begin
> B_1.P_1;
> B_2.P_2;
> end;
>
> $ gnatmake a
> $ ./a
> Concrete.P_1
> Concrete.P_1
> $
>
> In other words, both calls dispatched to the same procedure.
>
> Some experiments led me to the interesting observation:
> Changing this:
>
> type Middle is interface and Base_1 and Base_2;
>
> to this:
>
> type Middle is interface and Base_2 and Base_1;
>
> results in:
>
> $ ./a
> Concrete.P_2
> Concrete.P_2
>
> Again, both calls dispatched to the same procedure, but now I know
> that in both cases the dispatch goes to the *first* progenitor of the
> Middle interface. Obviously against 3.9.4-1/b.
>
> Things get particularly funny when the signatures of P_1 and P_2 are
> different (say, they have different sets of parameters).
>
> It all looks like the v-table got messed up.
>
> $ gnatmake --version
> GNATMAKE 4.4.0 20080314 (experimental) [trunk revision 133226]
>
> It is the newest version I could find for my system.
>
> --
> Maciej Sobczak * www.msobczak.com * www.inspirel.com
next prev parent reply other threads:[~2008-04-02 17:44 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-01 11:52 Compiler bug Maciej Sobczak
2008-04-01 13:00 ` Ludovic Brenta
2008-04-01 20:43 ` Maciej Sobczak
2008-04-02 11:39 ` Alex R. Mosteo
2008-04-02 17:44 ` Per Sandberg [this message]
-- strict thread matches above, loose matches on Subject: below --
2007-12-04 21:58 Compiler Bug REH
2007-12-04 22:25 ` Lucretia
2007-12-04 22:32 ` REH
2007-12-04 22:45 ` Randy Brukardt
2007-12-04 22:49 ` REH
2007-12-04 22:54 ` Adam Beneschan
2007-12-05 9:46 ` Samuel Tardieu
2007-12-05 16:07 ` Adam Beneschan
2007-12-06 3:30 ` Randy Brukardt
2007-12-06 3:30 ` Randy Brukardt
2007-12-04 22:45 ` Randy Brukardt
2007-12-06 6:51 ` Keith Thompson
2007-12-06 16:48 ` REH
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox