http://d.puremagic.com/issues/show_bug.cgi?id=8774
--- Comment #17 from Dmitry Olshansky <dmitry.o...@gmail.com> 2012-12-26 05:19:36 PST --- Spent some more time & removed Phobos dependencies. The sample below runs fine with -version=OK and triggers assert without. Curiously the only difference is a = a[1..$] vs the same via popFront (where array is passed by ref). void popFront(A)(ref A[] a) { a = a[1 .. $]; } private struct MapResult(alias fun, Range) { alias Range R; R _input; this(R input) { _input = input; } @property bool empty() { return _input.length == 0; } void popFront() { version(OK) _input = _input[1 .. $]; else _input.popFront(); // } @property auto ref front() { return fun(_input[0]); } @property auto length() { return _input.length; } alias length opDollar; } auto map(alias fun, Range)(Range r) { return MapResult!(fun, Range)(r); } int sliceBefore; void corrupt( immutable int numberOfThreads ) { immutable n = 1000000000 ; immutable delta = 1.0 / n ; immutable sliceSize = n / numberOfThreads ; sliceBefore = sliceSize; auto threads = map!( ( int i ) { auto closedPartialSum() { immutable ii = i ; return delegate ( ) { assert(sliceSize == sliceBefore); }; } return closedPartialSum(); }) ( [0] ); //create array of delegates and copy them using range-based foreach auto dgs = new void delegate()[threads.length]; size_t i=0; foreach(dg; threads) //empty-front-popFront dgs[i++] = dg; foreach(dg; dgs) dg(); } void main(){ corrupt(1); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------