d: Fix ICEs in the front-end when pointer size is 16-bit.
authorIain Buclaw <ibuclaw@gdcproject.org>
Mon, 31 Aug 2020 11:31:04 +0000 (13:31 +0200)
committerIain Buclaw <ibuclaw@gdcproject.org>
Mon, 31 Aug 2020 13:53:44 +0000 (15:53 +0200)
commit6940c20bbb3b5864e8b510de162d1a618aecca88
tree687831cd276e5ea6f4c438ddb455886d1cfbe0a7
parentf089569851ca9c8a81400dd8a159f86636ed20ec
d: Fix ICEs in the front-end when pointer size is 16-bit.

In the lowering of `bt*' intrinsics, some integer constants had
mismatched types, and bitsize was set to the wrong value.

In base_vtable_offset, the base offset value was calculated incorrectly.
The TypeInfo_Class object is comprised of 18 pointers and 1 uint field,
so now the internal classinfo type size is used instead.

gcc/d/ChangeLog:

* d-target.cc (Target::_init): Don't set classinfosize.
* d-tree.h (base_vtable_offset): Move under typeinfo.cc section.
* decl.cc (base_vtable_offset): Move to...
* typeinfo.cc (base_vtable_offset): ...here.  Get base offset from
internal TypeInfo_Class type.
* intrinsics.cc (expand_intrinsic_bt): Use pointer TYPE_SIZE for
setting bitsize value.  Build integer constants of correct type.
gcc/d/d-target.cc
gcc/d/d-tree.h
gcc/d/decl.cc
gcc/d/intrinsics.cc
gcc/d/typeinfo.cc