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: [email protected]
ReportedBy: [email protected]
CC: [email protected]
Don <[email protected]> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |[email protected]
Summary|[CTFE] "CTFE internal |[CTFE] ICE with pointer
|error" occurs |cast of indexed array
--- Comment #0 from Hisayuki Mima <[email protected]> 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 <[email protected]> 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: -------