Am 13.06.2015 um 15:09 schrieb Martin Frb: > On 13/06/2015 09:31, Florian Klämpfl wrote: >> The only way to prevent this (of course, such a simple case could be >> detected by the compiler but >> one can always construct an example which works around this detection), is >> to turn off the const >> optimization that const allows the compiler to pass only a reference, but I >> am pretty sure, people >> will not be happy about this :) > > Out of curiosity, how would you disguise it from the compiler?
Adding an additional indirection e.g. by a pointer, a class or an array. > Actually, how would you do that in the example I posted. In your example it > is not that hard to > discuise (but then in your example there is nothing unexpected) > > But in my example it is about refcounting (and pointing to unallocated mem) > > //procedure Foo2(out a: AnsiString; b: AnsiString); > Foo2(s1,s1); > > Foo2 is called with > 1) the same string for both param > 2) That string has a ref count of 1 before the call > > How to you disguise it, without incrementing the ref count) Foo2(a1[i],a2[j]) a1, a2 being dyn. arrays, but sharing data, i and j having the same value. var p1, p2 : pansistring Foo2(p1^,p2^); p1 and p2 pointing to the same data etc. _______________________________________________ fpc-devel maillist - [email protected] http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
