Const ref and rvalues again...

Dmitry Olshansky dmitry.olsh at gmail.com
Sun Nov 11 03:17:03 PST 2012


11/11/2012 2:08 PM, Jonathan M Davis пишет:
> On Sunday, November 11, 2012 13:36:05 Dmitry Olshansky wrote:
>> Nope. It's just that the stack is intact and contains: hello and goodbye
>> one after another. Without optimizations { } scope doesn't mean reuse
>> stack space.
>>
>> Now if play with stack a bit, for me the next one prints:
>> ­-²↑
>>
>> import std.stdio;
>>
>> void delegate() global;
>>
>> void foo(scope void delegate() del)
>> {
>>       global = del;
>> }
>>
>>
>> void f()
>> {
>>       {
>>           char[5] bar = "hello";
>>           foo((){writeln(bar);});
>>       }
>> }
>>
>> void main()
>> {
>>       char[7] baz = "goodbye";
>>       f();
>>
>>       global();
>> }
>
> It still prints "hello", even with full optimations turned on.

I tried with and without optimizations. I get garbage as expected.

So, it must be
> allocating a closure in spite of scope. So, it looks to me like scope is just
> completely ignored and does absolutely nothing at this point, unless I'm just
> completely missing something here.

Something must be screwed up. I dunno what, I use near-latest DMD from 
github and Win32 binaries.
For good measure try making stack variables larger if you are on 64bit. 
Drop in a  couple of calls to writeln before and after calling 'f' it 
should scramble the stack.

-- 
Dmitry Olshansky


More information about the Digitalmars-d mailing list