Mercurial > projects > ldc
view tests/minicomplex/arrays1.d @ 1491:360a8e8eea51
Teach stack promotion to walk the CFG when a potential reuse of an allocation
is found to see if it can actually happen instead of just assuming it will.
This allows it to catch cases like
{{{
int i;
Foo f;
while (cond(i))
f = new Foo(i++);
return f.value;
}}}
where it previously wouldn't because a phi using the allocation would appear in
the condition block to propagate it to the use after the loop.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Thu, 11 Jun 2009 02:04:44 +0200 |
parents | 1bb99290e03a |
children |
line wrap: on
line source
module tangotests.arrays1; import tango.stdc.stdio; void main() { real[] arr; print(arr); main2(); } void main2() { real[] arr = void; fill(arr); print(arr); main3(); } void main3() { } void print(real[] arr) { printf("len=%u ; ptr=%p\n", arr.length, arr.ptr); } void fill(ref real[] arr) { auto ptr = cast(void**)&arr; *ptr++ = cast(void*)0xbeefc0de; *ptr = cast(void*)0xbeefc0de; } void dg1(void delegate(int[]) dg) { dg2(dg); } void dg2(void delegate(int[]) dg) { dg(null); } void sarr1(int[16] sa) { sarr1(sa); } struct Str { size_t length; char* ptr; } void str1(Str str) { str1(str); } void str2(ref Str str) { str2(str); } void str3(out Str str) { str3(str); } void str4(Str* str) { str4(str); } void str5(Str);