Bug 6457 – [CTFE] .idup or casting of char[] does not really create a string literal recognizable in 'mixin', which causes a line-less error

Status
RESOLVED
Resolution
FIXED
Severity
critical
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
Other
OS
All
Creation time
2011-08-08T14:11:00Z
Last change time
2011-08-14T13:23:07Z
Keywords
diagnostic, rejects-valid
Assigned to
nobody
Creator
kennytm
Blocks
5373

Comments

Comment #0 by kennytm — 2011-08-08T14:11:52Z
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.
Comment #1 by hoganmeier — 2011-08-08T16:24:43Z
Isn't this even a regression?
Comment #2 by clugdbug — 2011-08-08T21:29:39Z
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.
Comment #3 by clugdbug — 2011-08-10T02:56:20Z
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.
Comment #4 by hoganmeier — 2011-08-14T13:23:07Z
Another test case which still triggers that error is bug 5373.