mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-11 18:33:14 +01:00
Removed DtoConstFieldInitializer, it's no longer needed and was buggy.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user