# HG changeset patch # User Tomas Lindquist Olsen # Date 1227990410 -3600 # Node ID c62c6936635bfbae91e94ce8ed4102be345c5be0 # Parent 28ce72c60a212e2729e33f805eb994a2850251d2 Removed DtoConstFieldInitializer, it's no longer needed and was buggy. diff -r 28ce72c60a21 -r c62c6936635b gen/classes.cpp --- a/gen/classes.cpp Sat Nov 29 20:57:52 2008 +0100 +++ b/gen/classes.cpp Sat Nov 29 21:26:50 2008 +0100 @@ -485,7 +485,7 @@ // add the field // and build its constant initializer lazily if (!var->ir.irField->constInit) - var->ir.irField->constInit = DtoConstFieldInitializer(var->loc, var->type, var->init); + var->ir.irField->constInit = DtoConstInitializer(var->loc, var->type, var->init); inits.push_back(var->ir.irField->constInit); lastoffset = offset; diff -r 28ce72c60a21 -r c62c6936635b gen/llvmhelpers.cpp --- a/gen/llvmhelpers.cpp Sat Nov 29 20:57:52 2008 +0100 +++ b/gen/llvmhelpers.cpp Sat Nov 29 21:26:50 2008 +0100 @@ -1428,55 +1428,6 @@ ////////////////////////////////////////////////////////////////////////////////////////// -LLConstant* DtoConstFieldInitializer(Loc loc, Type* t, Initializer* init) -{ - Logger::println("DtoConstFieldInitializer"); - LOG_SCOPE; - - const LLType* _type = DtoType(t); - - LLConstant* _init = DtoConstInitializer(loc, t, init); - assert(_init); - if (_type != _init->getType()) - { - if (Logger::enabled()) - Logger::cout() << "field init is: " << *_init << " type should be " << *_type << '\n'; - if (t->ty == Tsarray) - { - const LLArrayType* arrty = isaArray(_type); - uint64_t n = arrty->getNumElements(); - std::vector vals(n,_init); - _init = llvm::ConstantArray::get(arrty, vals); - } - else if (t->ty == Tarray) - { - assert(isaStruct(_type)); - _init = llvm::ConstantAggregateZero::get(_type); - } - else if (t->ty == Tstruct) - { - const LLStructType* structty = isaStruct(_type); - TypeStruct* ts = (TypeStruct*)t; - assert(ts); - assert(ts->sym); - assert(ts->sym->ir.irStruct->constInit); - _init = ts->sym->ir.irStruct->constInit; - } - else if (t->ty == Tclass) - { - _init = llvm::Constant::getNullValue(_type); - } - else { - Logger::println("failed for type %s", t->toChars()); - assert(0); - } - } - - return _init; -} - -////////////////////////////////////////////////////////////////////////////////////////// - DValue* DtoInitializer(LLValue* target, Initializer* init) { if (!init) @@ -1538,17 +1489,6 @@ LLSmallVector dims; - // handle zero initializers - if (expbase->isintegral() && exp->isConst()) - { - if (!exp->toInteger()) - return LLConstant::getNullValue(dstTy); - } - else if (exp->op == TOKnull) - { - return LLConstant::getNullValue(dstTy); - } - while(1) { Logger::println("t: %s", t->toChars()); diff -r 28ce72c60a21 -r c62c6936635b gen/llvmhelpers.h --- a/gen/llvmhelpers.h Sat Nov 29 20:57:52 2008 +0100 +++ b/gen/llvmhelpers.h Sat Nov 29 21:26:50 2008 +0100 @@ -87,7 +87,6 @@ // initializer helpers LLConstant* DtoConstInitializer(Loc loc, Type* type, Initializer* init); -LLConstant* DtoConstFieldInitializer(Loc loc, Type* type, Initializer* init); LLConstant* DtoConstExpInit(Loc loc, Type* t, Expression* exp); DValue* DtoInitializer(LLValue* target, Initializer* init); diff -r 28ce72c60a21 -r c62c6936635b gen/structs.cpp --- a/gen/structs.cpp Sat Nov 29 20:57:52 2008 +0100 +++ b/gen/structs.cpp Sat Nov 29 21:26:50 2008 +0100 @@ -208,7 +208,7 @@ // 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); + nextdef->ir.irField->constInit = DtoConstInitializer(nextdef->loc, nextdef->type, nextdef->init); LLConstant* c = nextdef->ir.irField->constInit; inits.push_back(c); @@ -263,7 +263,7 @@ // 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); + nextdef->ir.irField->constInit = DtoConstInitializer(nextdef->loc, nextdef->type, nextdef->init); LLConstant* c = nextdef->ir.irField->constInit; inits.push_back(c); diff -r 28ce72c60a21 -r c62c6936635b ir/irstruct.cpp --- a/ir/irstruct.cpp Sat Nov 29 20:57:52 2008 +0100 +++ b/ir/irstruct.cpp Sat Nov 29 21:26:50 2008 +0100 @@ -319,7 +319,7 @@ // add the field // lazily default initialize if (!var->ir.irField->constInit) - var->ir.irField->constInit = DtoConstFieldInitializer(var->loc, var->type, var->init); + var->ir.irField->constInit = DtoConstInitializer(var->loc, var->type, var->init); inits.push_back(var->ir.irField->constInit); lastoffset = offset;