https://issues.dlang.org/show_bug.cgi?id=14207
Kenji Hara <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |pull Hardware|x86 |All Summary|Assertion failure: |[REG2.065] Assertion |'(vd->storage_class & |failure: |(STCout | STCref)) ? |'(vd->storage_class & |isCtfeReferenceValid(newval |(STCout | STCref)) ? |) : |isCtfeReferenceValid(newval |isCtfeValueValid(newval)' |) : |on line 6724 in file |isCtfeValueValid(newval)' |'interpret.c' |on line 6724 in file | |'interpret.c' OS|Windows |All --- Comment #1 from Kenji Hara <[email protected]> --- This is a regression from 2.065, introduced by the pull request: https://github.com/D-Programming-Language/dmd/pull/2612 And in 2.067, my CTFE interpreter improvement changed the appearance of the issue. Reduced case: ubyte[8] nativeToBigEndian() { immutable ulong res = 1; return *cast(ubyte[8]*) &res; } auto digest() { ubyte[8] bits = nativeToBigEndian(); return bits; } // With 2.064, CTFE makes errors, but with 2.065 or later, it's silently accepted. enum h = digest(); void main() { // With 2.065 or later, following code makes ICE in 'expression.c' //pragma(msg, h); // With 2.065 or later, following code makes ICE in 'expression.c' or 'e2ir.c' import std.stdio; auto a = h; writeln(a); } Compiler fix: https://github.com/D-Programming-Language/dmd/pull/4545 --
