[Issue 3374] [tdpl] ICE(init.c): Associative array type not inferred
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Oct 9 00:32:49 PDT 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3374
Don <clugdbug at yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |patch
Platform|Other |All
Version|unspecified |2.033
OS/Version|Linux |All
--- Comment #1 from Don <clugdbug at yahoo.com.au> 2009-10-09 00:32:48 PDT ---
The ICE only occurs if it's inside a function. BTW if you change 'auto' into
enum, and
'assert' into 'static assert', it also works with the patch in place.
void bug3374()
{
auto famousNamedConstants =
[ "pi" : 3.14, "e" : 2.71, "moving sofa" : 2.22 ];
assert(famousNamedConstants["e"]==2.71);
}
There are two parts to this patch. The first part, in
ArrayInitializer::toExpression() is just for the ICE.
The ICE occurs because it's not checking for an ERROR type. (was NULL in D1).
This changes it from
ice-on-valid-code into rejects-valid. To completely fix the bug requires the
second part.
The second part, in ArrayInitializer::inferType(Scope *sc), is for the AA type
inference.
But, I had to do a semantic on the expression. Not sure if that's OK. This part
of the patch is for D1 as well.
PATCH against DMD 2.033. init.c, ArrayInitializer::toExpression(), line 407.
Index: init.c
===================================================================
--- init.c (revision 201)
+++ init.c (working copy)
@@ -404,6 +404,7 @@
Type *t = NULL;
if (type)
{
+ if (type == Type::terror) goto Lno;
t = type->toBasetype();
switch (t->ty)
{
@@ -542,8 +543,18 @@
return type;
Lno:
- error(loc, "cannot infer type from this array initializer");
- return Type::terror;
+ Initializer *iz = (Initializer *)value.data[0];
+ Expression *indexinit = (Expression *)index.data[0];
+ if (iz && indexinit)
+ { Type *t = iz->inferType(sc);
+ indexinit = indexinit->semantic(sc);
+ Type *indext = indexinit->type;
+ t = new TypeAArray(t, indext);
+ t = t->semantic(loc, sc);
+ type = t;
+ }
+ return type;
+
}
--
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