--- Comment #5 from Graham Fawcett <> 2010-06-16 
12:31:07 PDT ---
(In reply to comment #3)
> That's too general, the error message is important in other places. I think 
> the
> correct fix for the bug, is to allow a void initializer to be used inside
> another initializer. This might be a bug in the array literal initializers in
> mtype.c, which (from memory) creates an array literal by converting the
> initializers to expressions. At least in the case where ALL initializers are
> void, the final initializer could also be void.
> So the test case should be transformed into:
> Foo f = void;
> But the simplest solution is probably to change all members into default
> initializers, if they are a VoidInitializers.
> I recommend to put a breakpoint on the error message and find out where it's
> being called from.

Don, you're right. My test case above did not fail through mtype.c,
but rather through expression.c (and I've proposed a patch for that).
But I was able to produce a similar bug through mtype.c:

import std.stdio;
import std.variant;
import std.algorithm;

void main() {
  foreach (int v; map! "a.get!int" (variantArray(1,2,3)))

which fails here:

#0  VoidInitializer::toExpression (this=0x9139748) at init.c:100
#1  0x0810047b in TypeStruct::defaultInitLiteral (this=0x8d98ff0, loc=...)
    at mtype.c:6921
#2  0x081039b5 in Type::getProperty (this=0x8d98ff0, loc=..., ident=0x81aec50)
    at mtype.c:1691
#3  0x08102944 in Type::dotExp (this=0x8d98ff0, sc=0x9177c50, e=0x9320c88, 
    ident=0x81aec50) at mtype.c:1809

I'll take a look into mtype.c as well.

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to