Removed warnings on ignored aligns. Only do aligment on packed structs, align(1) struct Packed { ... }

Changed the way struct/class fields are added, first small part of cleaning up these...
Make struct/class/union fields aware of any anonymous struct/union they might be part of, not yet really useful, but part of getting better union support.
This commit is contained in:
Tomas Lindquist Olsen
2008-10-28 15:41:09 +01:00
parent 07f35424f1
commit 6cf5ca6aba
10 changed files with 81 additions and 24 deletions

View File

@@ -1,8 +1,12 @@
#include "gen/llvm.h"
#include "mtype.h"
#include "aggregate.h"
#include "declaration.h"
#include "ir/irstruct.h"
#include "gen/irstate.h"
#include "gen/tollvm.h"
IrInterface::IrInterface(BaseClass* b)
{
@@ -56,3 +60,15 @@ IrStruct::IrStruct(Type* t)
IrStruct::~IrStruct()
{
}
void IrStruct::addField(VarDeclaration* v)
{
// might already have its irField, as classes derive each other without getting copies of the VarDeclaration
if (!v->ir.irField)
{
assert(!v->ir.isSet());
v->ir.irField = new IrField(v);
}
const LLType* _type = DtoType(v->type);
offsets.insert(std::make_pair(v->offset, IrStruct::Offset(v, _type)));
}