http://d.puremagic.com/issues/show_bug.cgi?id=6792

           Summary: [CTFE] ICE with pointer cast of indexed array
           Product: D
           Version: D2
          Platform: x86
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nob...@puremagic.com
        ReportedBy: youx...@gmail.com
                CC: clugd...@yahoo.com.au



Don <clugd...@yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |clugd...@yahoo.com.au
            Summary|[CTFE] "CTFE internal       |[CTFE] ICE with pointer
                   |error" occurs               |cast of indexed array


--- Comment #0 from Hisayuki Mima <youx...@gmail.com> 2011-10-08 10:24:56 PDT 
---
struct S{
    int i;
}

static assert({
    {
        void* p;
        p = [S(1)].ptr;
        S s = *(cast(S*)p);// OK
        assert(s.i == 1);
    }
    {
        void*[] ary;
        ary ~= [S(2)].ptr;
        S s = *(cast(S*)ary[0]);// Error: CTFE internal error assigning struct
        assert(s.i == 2);
    }
    {
        void*[string] aa;
        aa["key"] = [S(3)].ptr;
        S s = *(cast(S*)aa["key"]);// Error: CTFE internal error assigning
struct
        assert(s.i == 3);
    }
    return true;
}());


The latest dmd built from github cannot compile the above code.

--- Comment #1 from Don <clugd...@yahoo.com.au> 2011-10-10 01:15:26 PDT ---
Another case, where it's an lvalue instead of an rvalue:

    {
        void*[7] ary;
        ary[6]= [S(2)].ptr;        
        *(cast(S*)ary[6]) = S(4); //ICE(interpret.c 2965)
    }

The root cause is that type painting of pointers hasn't been considered
properly in CTFE.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------

Reply via email to