[Issue 15306] Delegates with shared context can have unshared aliasing

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Mon Nov 9 04:12:53 PST 2015


https://issues.dlang.org/show_bug.cgi?id=15306

Jakob Ovrum <jakobovrum at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|Delegates with shared       |Delegates with shared
                   |context                     |context can have unshared
                   |                            |aliasing

--- Comment #1 from Jakob Ovrum <jakobovrum at gmail.com> ---
(In reply to Jakob Ovrum from comment #0)
> void main()
> {
> 	int i = 42;
> 
> 	// Correctly prevented for immutable context
> 	// auto dg = delegate void() immutable { auto inner = i; };
> 
> 	// Incorrectly allowed; context has unshared aliasing
> 	int* p = &i;
> 	auto dg = delegate int() shared { return *p; };
> 	assert(dg() == i);
> }
> 
> ---
> 
> Also, there doesn't appear to be any inference of the context type
> qualifier, neither for function literals nor nested functions. Taking the
> address of a member function of an immutable/shared object doesn't seem to
> give the context type qualifier either.

--


More information about the Digitalmars-d-bugs mailing list