From: Maciej Sobczak <see.my.homepage@gmail.com>
Subject: Compiler bug
Date: Tue, 1 Apr 2008 04:52:50 -0700 (PDT)
Date: 2008-04-01T04:52:50-07:00 [thread overview]
Message-ID: <95883266-bd95-499f-a2dc-59580f2c5089@2g2000hsn.googlegroups.com> (raw)
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 reply other threads:[~2008-04-01 11:52 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-01 11:52 Maciej Sobczak [this message]
2008-04-01 13:00 ` Compiler bug Ludovic Brenta
2008-04-01 20:43 ` Maciej Sobczak
2008-04-02 11:39 ` Alex R. Mosteo
2008-04-02 17:44 ` Per Sandberg
-- 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