ICE?

Daniel Kozak via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun May 17 03:47:04 PDT 2015


On Sun, 17 May 2015 10:36:33 +0000
Namespace via Digitalmars-d-learn <digitalmars-d-learn at 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 at 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.



More information about the Digitalmars-d-learn mailing list