Removed DtoConstFieldInitializer, it's no longer needed and was buggy.

This commit is contained in:
Tomas Lindquist Olsen
2008-11-29 21:26:50 +01:00
parent 4da2cf066e
commit 5d1366d27f
5 changed files with 4 additions and 65 deletions

View File

@@ -485,7 +485,7 @@ static size_t init_class_initializer(std::vector<LLConstant*>& inits, ClassDecla
// 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;

View File

@@ -1428,55 +1428,6 @@ LLConstant* DtoConstInitializer(Loc loc, Type* type, Initializer* init)
//////////////////////////////////////////////////////////////////////////////////////////
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<LLConstant*> 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 @@ static LLConstant* expand_to_sarray(Type *base, Expression* exp)
LLSmallVector<size_t, 4> 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());

View File

@@ -87,7 +87,6 @@ LLValue* DtoRawVarDeclaration(VarDeclaration* var);
// 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);

View File

@@ -208,7 +208,7 @@ Lpadding:
// 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 @@ Lpadding2:
// 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);

View File

@@ -319,7 +319,7 @@ void IrStruct::buildDefaultConstInit(std::vector<llvm::Constant*>& inits)
// 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;