[charm] Pb with inheritance

Filippo Gioachin gioachin at uiuc.edu
Thu Jun 3 15:36:23 CDT 2010


Christian, I tried your program (from the tar in the first email). It
appears that when you call a->foo2() you actually end up running a->foo1(),
as the output says:
[Main] main...
[Main] main... done
[A] created
[A] foo1 called
[Main] All done

There seems to be a problem in charm when multiple inheritance and virtual
functions are used: the objects are not properly cast between types. Mainly
because objects are stored internally as void*, and the superclasses I1, I2
of A are not at the same memory location as A is. This might require some
modifications to allow multiple inheritance to work correctly. In the
meanwhile, I would suggest limiting to single inheritance of chares.
Regards,
Filippo

On Tue, Jun 1, 2010 at 06:49, Christian Perez <christian.perez at inria.fr>wrote:

> In the ci file, A inherits from I1 and I2.
> So, I guess I should be able to invoke foo1 or foo2 on
> CProxy_A.
>
> It is basically the same example as in
> http://charm.cs.uiuc.edu/manuals/html/charm++/4_1.html
> but with multiple inheritance.
>
> Christian
>
> On 06/01/2010 01:45 PM, Aaron Becker wrote:
> > Notice that in your example code you are invoking foo1 and foo2 on an
> > object of type CProxy_A, not type A. You can't invoke non-entry
> > methods of an object through its proxy, except by calling ckLocal if
> > it's a local chare. Otherwise you could call non-entry methods on
> > remote objects, which will never work. The name resolution for
> > CProxy_A finds the entry methods in the base classes because CProxy_A
> > has no foo1 and foo2 methods of its own.
> >
> > Aaron
> >
> > On Tue, Jun 1, 2010 at 3:54 AM, Christian Perez
> > <christian.perez at inria.fr>  wrote:
> >
> >> Hello,
> >>
> >> please consider the attached example, where a chare A inherits from 2
> others
> >> chare I1&  I2:
> >>
> >>   chare I1
> >>   {
> >>      entry void foo1();
> >>   };
> >>
> >>   chare I2
> >>   {
> >>      entry void foo2();
> >>   };
> >>
> >>
> >>   chare A : I1, I2
> >>   {
> >>      entry A();
> >>   };
> >>
> >> When invoking foo2 on A, either foo2 of the class I2 is called (not
> A::foo2
> >> !) if methods foo1&  foo2 are not virtual
> >> or foo1 on A (vtable issue?) is invoked if they are virtual. Though
> class
> >> inheritance is not virtual, can it be the same issue?
> >>
> >> Any help is welcome.
> >>
> >> Christian
> >>
> >> _______________________________________________
> >> charm mailing list
> >> charm at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/charm
> >>
> >>
> >>
>
> _______________________________________________
> charm mailing list
> charm at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/charm
>
>


-- 
Filippo Gioachin
PhD Candidate
Department of Computer Science
University of Illinois at Urbana-Champaign
Ph: +1-217-333-4764
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.cs.uiuc.edu/pipermail/charm/attachments/20100603/720da539/attachment.html 


More information about the charm mailing list