--- dmd~/todt.c 2010年11月19日 22:39:03.675906002 +0000 +++ dmd/todt.c 2010年12月09日 15:30:36.486760002 +0000 @@ -143,6 +143,11 @@ { unsigned sz = dt_size(d); unsigned vsz = v->type->size(); unsigned voffset = v->offset; + if (sz> vsz) + { + assert(v->type->ty == Tsarray && vsz == 0); + error(loc, "zero length array %s has non-zero length initializer", v->toChars()); + } unsigned dim = 1; for (Type *vt = v->type->toBasetype(); @@ -686,7 +691,11 @@ { unsigned sz = dt_size(d); unsigned vsz = v->type->size(); unsigned voffset = v->offset; - assert(sz <= vsz); + if (sz> vsz) + { + assert(v->type->ty == Tsarray && vsz == 0); + error("zero length array %s has non-zero length initializer", v->toChars()); + } unsigned dim = 1; Type *vt; @@ -696,6 +705,8 @@ { TypeSArray *tsa = (TypeSArray *)vt; dim *= tsa->dim->toInteger(); } + //printf("sz = %d, dim = %d, vsz = %d\n", sz, dim, vsz); + assert(sz == vsz || sz * dim <= vsz); for (size_t i = 0; i < dim; i++) {

AltStyle によって変換されたページ (->オリジナル) /