Static foreach pull request
Stefan Koch via Digitalmars-d
digitalmars-d at puremagic.com
Wed May 10 04:12:06 PDT 2017
On Wednesday, 10 May 2017 at 09:42:53 UTC, Timon Gehr wrote:
> On 09.05.2017 23:56, Timon Gehr wrote:
>>>
>>> core.exception.AssertError at ddmd/blockexit.d(90): Assertion
>>> failure
>>> ----------------
>>> ...
>>
>> Thanks! (It's a known issue though:
>> https://github.com/tgehr/dmd/blob/static-foreach/test_staticforeach.d#L330.)
>>
>
> Actually, yours is a different case with the same outcome (f
> and idonotexist do not matter at all, the issue exists even for
> static foreach(j;0..0){}).
> All static foreach loops over empty (non-AliasSeq) aggregates
> failed that assertion. The reason was that CTFE can return a
> null literal from a function that returns T[], but the constant
> folder cannot actually evaluate null.length for some reason.
So here is the difference between null and []:
null :
() { Slice* s; s = null; return s; }
[] :
() { Slice* s; s = alloca(sizeof(*s)); s.base = null; s.length =
0; return s; }
Therefore
null.length => (cast(Slice*)null).length; which results in a
segfault.
and
[].length => (cast(Slice*)somevalidSliceDiscriptor).length;
More information about the Digitalmars-d
mailing list