On Sun, 17 May 2015 10:36:33 +0000 Namespace via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote:
> On Sunday, 17 May 2015 at 09:59:41 UTC, Daniel Kozak wrote: > > > > On Sun, 17 May 2015 09:33:27 +0000 > > Namespace via Digitalmars-d-learn > > <digitalmars-d-learn@puremagic.com> wrote: > > > >> On Sunday, 17 May 2015 at 09:30:16 UTC, Gary Willoughby wrote: > >> > On Sunday, 17 May 2015 at 09:25:33 UTC, Namespace wrote: > >> >> Is this error an ICE? I think so, because I see the > >> >> internal filename, but I'm not sure. > >> >> > >> >> Error: e2ir: cannot cast malloc(length * 8u) of type void* > >> >> to type char[] > >> > > >> > Have you got a code sample to reproduce this? > >> > >> Of course: > >> > >> ---- > >> void main() { > >> import core.stdc.stdlib : malloc, free; > >> > >> auto ptr = cast(char[]) malloc(42); > >> } > >> ---- > > > > I guess it should be: > > > > auto ptr = cast(char*)malloc(42)[0 .. 42]; > > That would work, but I did it on purpose. I wanted to test > whether such dangerous code compiles or whether the compiler is > smart enough and hits the alarm. I see. for eg.: void main() { import core.stdc.stdlib : malloc, free; static struct arr { size_t length; void* ptr; } auto ptr = cast(arr) malloc(42); } prints: test2.d(9): Error: cannot cast expression malloc(42LU) of type void* to arr which makes sense, even e2ir text is not here.