[Issue 6792] New: [CTFE] ICE with pointer cast of indexed array
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon Oct 10 01:16:15 PDT 2011
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: nobody at puremagic.com
ReportedBy: youxkei at gmail.com
CC: clugdbug at yahoo.com.au
Don <clugdbug at yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |clugdbug at yahoo.com.au
Summary|[CTFE] "CTFE internal |[CTFE] ICE with pointer
|error" occurs |cast of indexed array
--- Comment #0 from Hisayuki Mima <youxkei at 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 <clugdbug at 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: -------
More information about the Digitalmars-d-bugs
mailing list