Comment # 4 on bug 167 from
(In reply to Johannes Pfau from comment #3)
> Yes, I hit this issue with 8bit AVRs (pointers/size_t is 16 bit on AVR
> although registers are 8bit). Maybe a clean solution is to split
> Target::init / Target::init2 and use Target::sizetsize in Type::init?
> However, overwriting Type::tsize_t seems to work for now.
> 

Adding more inits won't help.  Moving the isLP64 logic (and subsequent setting
of Type::tsize/tptrdiff would.


> A related question: in d-codegen.cc::build_offset
> tree ofs = fold_convert (Type::tsize_t->toCtype(), byte_offset);
> 
> shouldn't this use tptrdiff_t? I think this code could break if wordsize and
> pointer size are different.
> However, simply changing this to tptrdiff_t breaks the build. I guess we'd
> really need a unsigned tptrdiff_t.

Yah, there has been an agreement for quite some time now that size_t/ptrdiff_t
types don't really mean their C equivalents in the truest sense.  Both should
be the same size.  So if in doubt, just use POINTER_SIZE to determine the
correct size_t/ptrdiff_t type in D.

We still have __builtin_machine_[u]int and __builtin_pointer_[u]int for C ABI
reasons.


You are receiving this mail because: