Mercurial > projects > ldc
diff gen/structs.cpp @ 351:f273f5c58a9a trunk
[svn r372] Fixed extern(C++) handling now same as DMD, which is to treat it like extern(C).
Fixed a problem in resolving struct types where the size of elements might not yet be known. Switched to using DMD size() instead
of LLVM ABI size (TargetData).
author | lindquist |
---|---|
date | Mon, 14 Jul 2008 03:23:43 +0200 |
parents | 5320fe65a65d |
children | 74101be2a553 |
line wrap: on
line diff
--- a/gen/structs.cpp Mon Jul 14 01:03:53 2008 +0200 +++ b/gen/structs.cpp Mon Jul 14 03:23:43 2008 +0200 @@ -188,12 +188,12 @@ assert(lastoffset == 0); fieldtype = i->second.type; fieldinit = i->second.var; - prevsize = getABITypeSize(fieldtype); + prevsize = fieldinit->type->size(); i->second.var->ir.irField->index = idx; } // colliding offset? else if (lastoffset == i->first) { - size_t s = getABITypeSize(i->second.type); + size_t s = i->second.var->type->size(); if (s > prevsize) { fieldpad += s - prevsize; prevsize = s; @@ -203,7 +203,7 @@ } // intersecting offset? else if (i->first < (lastoffset + prevsize)) { - size_t s = getABITypeSize(i->second.type); + size_t s = i->second.var->type->size(); assert((i->first + s) <= (lastoffset + prevsize)); // this holds because all types are aligned to their size sd->ir.irStruct->hasUnions = true; i->second.var->ir.irField->index = idx; @@ -226,7 +226,7 @@ lastoffset = i->first; fieldtype = i->second.type; fieldinit = i->second.var; - prevsize = getABITypeSize(fieldtype); + prevsize = fieldinit->type->size(); i->second.var->ir.irField->index = idx; fieldpad = 0; }