[Issue 7492] [CTFE] Error at assign to immutable character array
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Tue Jan 20 11:42:59 PST 2015
https://issues.dlang.org/show_bug.cgi?id=7492
Kenji Hara <k.hara.pg at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |REOPENED
See Also| |https://issues.dlang.org/sh
| |ow_bug.cgi?id=14017
Resolution|INVALID |---
--- Comment #7 from Kenji Hara <k.hara.pg at gmail.com> ---
(In reply to Denis Shelomovskij from comment #5)
> Filed issue 14017.
By looking the code in 14017, I recognized the real issue at last...
Full code to illustrate issue.
int[] f() { return new int[](1); }
char[] g() { return new char[](1); }
immutable( int[]) a = f(); // [A] accepted
immutable(char[]) s = g(); // [B] rejected
If we just only consider type system, both conversions:
int[] to immutable( int[])
char[] to immutable(char[])
are not possible.
But if we also consider CTFE, we can regard that the function calls will be
replaced with the literals that returned by CTFE:
immutable( int[]) a = [0];
immutable(char[]) s = ['\xff'];
and literals can be convertible to the variable type.
---
By looking dmd internals, current semantic process is nearly the latter
replacement model. And maybe the [B] case is happened by the issue in the
interpreter code for scrubbing CTFE return value.
But, at the same time the case [A] looks like a kind of type system breaking.
Anyway, at least it's an inconsistent compiler behavior. I reopen this.
--
More information about the Digitalmars-d-bugs
mailing list