[D1] assert failure expression.c

%u e at ee.com
Sat Oct 9 11:30:35 PDT 2010


Done & Thanks!

== Quote from bearophile (bearophileHUGS at lycos.com)'s article
> %u:
> > Incomplete mixin expression + char[] to char assignment = crash :)
> You (or me or someone else) may add this to Bugzilla:
> char[2] foo() {
>     char[2] code;
>     code[1] = "";
>     return code;
> }
> struct Bar {
>     int i = mixin(foo());
> }
> void main() {}
> > And while you are reading this, could you maybe tell me why this needs a .dup?
> > --
> > char[] bar()
> > {
> >   char[8] res = "int i=0;";
> >   return res.dup;// without: main.d(/here/): Error: escaping reference to
> > local res
> > }
> > mixin ( bar() );
> If bar() returns a char[], it means it returns a dynamic array. char[8] inside
bar() is allocated on the stack, so if you convert a static array to a dynamic
array, it doesn't get copied (no return by value), the dynamic array is just a
reference to the stack memory, and this is a bug. If bar returns a char[8] there
is no error in D2 because fixed-sized arrays get copied by value.
> Bye,
> bearophile



More information about the Digitalmars-d-learn mailing list