[omniORB] gcc and multiple virtual inheritance

zee zeyu@kasenna.com
Mon, 18 Feb 2002 15:52:57 -0800


This is a multi-part message in MIME format.

------=_NextPart_000_0068_01C1B894.55C0E4E0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hi there, i recently ran into a problem with fairly basic operations.  I =
have an IDL that says:

module A {

interface B {

    };
interface C : B {

    };
};

This would generate C++ classes:

A::_impl_B
A::_impl_C
POA_A::B
POA_A::C

in the skeletons.  My implementation of B and C would then be:

A_C_impl : public POA_A::C, PortableServer::RefCountServantBase

The constructor code for A_C_impl generated by gcc is bad and would =
corrupt the heap with segvs.  Both gcc-2.95.2 and gcc-3.0.2 exhibit this =
problem.

Had anybody else seen this?  How do you guys implement interface =
inheritance using gcc?  do you use a tie based implementation?

z

P.S.  there was some info posted last year about this but i couldn't =
find any post of solutions.

http://www.uk.research.att.com/omniORB/archives/2001-06/0182.html

------=_NextPart_000_0068_01C1B894.55C0E4E0
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2712.300" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Hi there, i recently ran into a problem =
with fairly=20
basic operations.&nbsp; I have an IDL that says:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>module A {</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>interface B {</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp; };</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>interface C : B {</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp; };</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>};</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>This would generate C++ =
classes:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>A::_impl_B</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>A::_impl_C</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>POA_A::B</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>POA_A::C</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>in the skeletons.&nbsp; My =
implementation of B and=20
C would then be:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>A_C_impl : public POA_A::C,=20
PortableServer::RefCountServantBase</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>The constructor&nbsp;code for A_C_impl =
generated by=20
gcc is bad and would corrupt the heap with segvs.&nbsp; Both gcc-2.95.2 =
and=20
gcc-3.0.2 exhibit this problem.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Had anybody else seen this?&nbsp; How =
do you guys=20
implement interface inheritance using gcc?&nbsp; do you use a tie based=20
implementation?</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>z</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>P.S.&nbsp; there was some info posted =
last year=20
about this but i couldn't find any post of solutions.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><A=20
href=3D"http://www.uk.research.att.com/omniORB/archives/2001-06/0182.html=
">http://www.uk.research.att.com/omniORB/archives/2001-06/0182.html</A></=
DIV></BODY></HTML>

------=_NextPart_000_0068_01C1B894.55C0E4E0--