Objective-C++ : Fix bitfield ivars.
authorIain Sandoe <iain@sandoe.co.uk>
Sat, 10 Oct 2020 10:14:47 +0000 (11:14 +0100)
committerIain Sandoe <iain@sandoe.co.uk>
Sun, 11 Oct 2020 16:19:57 +0000 (17:19 +0100)
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.

gcc/objc/objc-next-runtime-abi-02.c

index 60bf86ab8c9e8460828097f3210abb46de63a361..b83c9a31dbf732d8a8c1111d018c9ad36bac1e6d 100644 (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);