Objective-C++ : Fix bitfield ivars.

This fixes a regression present from 8.x;  It used to be OK
to test for a DECL_INITIAL value to flag that an ivar was a
bitfield (the initial value was the width).  This still works
on C / Objective-C, but no longer on C++.  Replace the test
with DECL_C_BIT_FIELD() which is set for both C and C++.

gcc/objc/ChangeLog:

	* objc-next-runtime-abi-02.c (objc_v2_build_ivar_ref): Test
	DECL_C_BIT_FIELD to detect that an ivar is a bitfield.
This commit is contained in:
Iain Sandoe 2020-10-10 11:14:47 +01:00
parent 04103ecbaa
commit 73699d921d

View file

@ -1395,12 +1395,7 @@ objc_v2_build_ivar_ref (tree datum, tree component)
return NULL_TREE;
/* This routine only handles non-bitfield fields */
/* DECL_INITIAL macro is set to width of bitfield and can be relied
on to check for bitfield ivars. Note that I cannot rely on
DECL_BIT_FIELD macro because it is only set when the whole struct
is seen (at finish_struct) and not when the ivar chain is
built. */
if (DECL_INITIAL (field))
if (DECL_C_BIT_FIELD (field))
return NULL_TREE;
create_ivar_offset_name (var_offset_name, CLASS_NAME (class_name), field);