on 2.063, behavior is normal, but on 2.064 this passes: (see "weird" below) (on v2.064-devel-75f7752) string identity(string a){ return a; } string fun(){ import std.array; Appender!(string) ret; ret.put("identity(`Ω`)"); return ret.data; } void main(){ enum a1="identity(`Ω`)"; enum a2=fun; assert(a1==a2); assert(mixin(a1)!=mixin(a2));//weird enum a1b=mixin(a1); enum a2b=mixin(a2); assert(cast(ubyte[])a1b == [206, 169]); assert(cast(ubyte[])a2b == [195, 142, 194, 169]); }
This regression is caused by recent Appender change: https://github.com/D-Programming-Language/phobos/commit/4da1639c98cb73d07858b17c2d225063889e4700 , but essentialy this is a dmd bug. Reduced case: string identity(string a) { return a; } string fun() { char[] s; s.length = 14; s[0 .. 14] = "identity(`Ω`)"[]; return cast(string)s; } void main() { enum a1 = "identity(`Ω`)"; enum a2 = fun(); // fun() returns a string which originally mutable array static assert(cast(ubyte[])mixin(a1) == [0xCE, 0xA9]); static assert(cast(ubyte[])mixin(a2) == [0xCE, 0xA9]); // fails! }
https://github.com/D-Programming-Language/dmd/pull/2473
Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/d6e9ea0fc6b906c829344806bb89c14d92bf48d7 fix Issue 10804 - regression(2.063=>2.064) problem with Appender or dmd? https://github.com/D-Programming-Language/dmd/commit/28f2c8c6c4e82392ff4aa366cf872bef45ee4f75 Merge pull request #2473 from 9rnsr/fix10804 [REG2.064a] Issue 10804 - problem with Appender or dmd?