Test case: ----------------------------- string bug6457() { auto d = new char[6]; d[] = "int a;"; return d.idup; // <-- won't make a real string // return cast(string)d; // <-- neither does this } mixin(bug6457()); ----------------------------- Error: argument to mixin must be a string, not (['i','n','t',' ','a',';']) ----------------------------- This affects all codes that uses std.array.appender. 'mixin' should be able to accept a string casted/idup-ed from a 'char[]', or the interpreter should be able to convert a 'char[]' expression to a StringExp in a 'cast(string)', and no matter which solution is taken, the error of 'mixin' should have the line number.
Isn't this even a regression?
This doesn't work either, and it doesn't involve CTFE: const char[] s = ['i','n','t',' ','a',';']; mixin(s); It's one of the few cases where arrays literals of chars aren't being accepted as string literals.
This particular test case is fixed in this commit: https://github.com/D-Programming-Language/dmd/commit/df2b9cdff0f5c23449be7a6b9a875bcf92b38f8d I created bug 6462 for the test case in comment 2, which has does not involve CTFE.
Another test case which still triggers that error is bug 5373.