Mercurial > projects > ldc
diff gen/structs.cpp @ 800:d14e4594c7d7
Changed aggregate field initializers to be created lazily, fixes problem with static void arrays in aggregates.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Sat, 29 Nov 2008 18:28:17 +0100 |
parents | 340acf1535d0 |
children | 28ce72c60a21 |
line wrap: on
line diff
--- a/gen/structs.cpp Sat Nov 29 21:25:43 2008 +0100 +++ b/gen/structs.cpp Sat Nov 29 18:28:17 2008 +0100 @@ -208,6 +208,8 @@ // do the default Logger::println("adding default field: %s : +%u", nextdef->toChars(), nextdef->offset); + if (!nextdef->ir.irField->constInit) + nextdef->ir.irField->constInit = DtoConstFieldInitializer(nextdef->loc, nextdef->type, nextdef->init); LLConstant* c = nextdef->ir.irField->constInit; inits.push_back(c); @@ -261,6 +263,8 @@ // do the default Logger::println("adding default field: %s : +%u", nextdef->toChars(), nextdef->offset); + if (!nextdef->ir.irField->constInit) + nextdef->ir.irField->constInit = DtoConstFieldInitializer(nextdef->loc, nextdef->type, nextdef->init); LLConstant* c = nextdef->ir.irField->constInit; inits.push_back(c); @@ -463,15 +467,6 @@ const llvm::StructType* structtype = isaStruct(sd->type->ir.type->get()); - // make sure each offset knows its default initializer - Array* fields = &sd->fields; - for (int k=0; k < fields->dim; k++) - { - VarDeclaration* v = (VarDeclaration*)fields->data[k]; - LLConstant* finit = DtoConstFieldInitializer(v->loc, v->type, v->init); - v->ir.irField->constInit = finit; - } - // always generate the constant initalizer if (sd->zeroInit) {