[fpc-devel] Variant compiling errors
petr.kristan at epos.cz
petr.kristan at epos.cz
Tue Oct 11 08:59:48 CEST 2005
On Mon, Oct 10, 2005 at 02:11:04PM +0200, Florian Klaempfl wrote:
> petr.kristan at epos.cz wrote:
>
> > Hi.
> >
> > After a few hours with gdb was isolated errors and strangeness in compiler
> > at work with variants:
> >
> > Example:
> >
> > function c(const vv: variant): variant;
> > begin
> > result := vv;
> > end;
> >
> > function b(vv: variant): variant;
> > begin
> > result := vv;
> > end;
> >
> > function a(var vv: variant): variant;
> > begin
> > result := vv;
> > end;
> >
> > procedure start;
> > var
> > v, v1: Variant;
> > begin
> > v := VarArrayCreate([0, 0], varVariant);
> >
> > a(v);
> > //if variant result of a() isn't assigned, fpc_finalize() at end of a(v)
> > //destroys temporary result. But when start() ends fpc_finalize() tryes
> > //to destroy it again
> >
> > b(v);
> > //if b() is called then variant param is copied but not whole (deeply), vv.varray
> > //points to the same place as v.array. At end of b(v) is pointer
> > //vv.array destroyed by fpc_decref() and then v.array points to the
> > //destroyed memory
> >
> > c(v);
> > //At the start of func c() is v copied to the vv deeply but i think
> > //that behaviour of "var" and "const" calling should be the same (by
> > //reference) not vy value like c()
> > end;
> >
> > I try to understand compiler code and repair it, but this is "very long
> > distance race". But like I see the responses to my previous reports
> > (absolutely no interest), this will be fastest solution :(. Really here
> > isn't anybody who understand to compiler code and help me with repair?
> > Or is anywhere another e-mail list or another comunication channel where
> > i can talk about this problem?
> >
> > Petr
> >
>
> The var arrays problems are known, see also
> http://www.freepascal.org/bugs/showrec.php3?ID=3830
>
> It requires some design changes though that's why it isn't fixed yet. The
> problem is that the compiler handles variants as ref. counted types when passing
> them as parameters etc. However, this is wrong behaviour as soon as a variant
> contains an array.
Thanks for explanation. Yesterday i looked at compiler code and fpc
internals documentation. I must recognize that fixing this is beyond my
strength. Is somebody working on it? I can help with debugging.
Vararray problem stopped my work -- porting big information system to fpc.
In Rtl/fcl i can repair or fill missing, but here i'am helpless.
For that reason i hurry on fixing this.
Petr
--
Ing. Petr Kristan
.
EPOS PRO s.r.o., Bozeny Nemcove 2625, 530 02 Pardubice
tel: +420 466335223 Czech Republic (Eastern Europe)
fax: +420 466510709
More information about the fpc-devel
mailing list