[Issue 6769] New: [CTFE] AA.keys doesn't compile when -inline is used
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Oct 5 01:40:30 PDT 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6769
Summary: [CTFE] AA.keys doesn't compile when -inline is used
Product: D
Version: D2
Platform: Other
OS/Version: Windows
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: clugdbug at yahoo.com.au
--- Comment #0 from Don <clugdbug at yahoo.com.au> 2011-10-05 01:39:45 PDT ---
This is an extremely ugly issue which broke the autotester.
The problem is the templated AA inside object.di. It performs some nasty casts
to void[], then calls the runtime. To avoid this, the CTFE engine intercepts
all AA built-in functions at a higher level. But, the inliner really fouls
things up, because it optimizes away the functions which the CTFE engine tries
to recognize.
Minimal test case for 2.055
static assert({
int[int] w= [1:2];
return w.keys.length;
}()==1);
This works OK, as long as -inline isn't used. But with -inline, it gives:
c:\dmd\windows\bin\..\..\src\druntime\import\object.di(378): Error: _aaKeys
cann
ot be interpreted at compile time, because it has no available source code
test.d(6): Error: cannot evaluate delegate @system uint()
{
int[int] w = [1:2];
return (ref AssociativeArray!(int,int) this = w;
, (assert(&this,"null this") , (void[] a = _aaKeys(this.p,4u);
, *& a))).length;
}
() at compile time
-------
Note that the member variable 'p' is void *. The whole thing is a disgusting
cast-fest.
--
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