aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorechristo <echristo@138bc75d-0d04-0410-961f-82ee72b054a4>2006-04-28 23:34:41 +0000
committerechristo <echristo@138bc75d-0d04-0410-961f-82ee72b054a4>2006-04-28 23:34:41 +0000
commit5eb5242e7fd67331fd2151f09339e24a2c011f86 (patch)
tree2bb7b0bf07922213a14b203add90c0b67ddb0d46
parent8db333af6dc0854ebbca8b10e24a37bf14b06a6f (diff)
2006-04-27 Eric Christopher <echristo@apple.com>apple/gcc-5339
Radar 4454599 Radar 4481146 * stor-layout.c (update_alignment_for_field): Unconditionalize ms_bitfield_layout_p code. Handle non-bitfield fields. Remove extra alignment code. (place_field): Don't realign if ms_bitfield_layout_p. Unconditionalize ms_bitfield_layout_p code. Rewrite handling of structure fields. Rewrite bitfield reversal handling. 2006-04-28 Eric Christopher <echristo@apple.com> Radar 4454599 * gcc.apple/bitreverse-13.c: Remove. * gcc.apple/bitreverse-19.c: Ditto. * gcc.apple/bitreverse-2.c: Ditto. * gcc.apple/bitreverse-20.c: Ditto. * gcc.apple/bitreverse-21.c: Ditto. * gcc.apple/bitreverse-24.c: Ditto. * gcc.apple/bitreverse-27.c: Ditto. * gcc.apple/bitreverse-4.c: Ditto. * gcc.apple/bitreverse-5.c: Ditto. * gcc.apple/bitreverse-6.c: Ditto. * gcc.apple/bitreverse-7.c: Ditto. * gcc.apple/bitreverse-8.c: Ditto. * gcc.apple/bitreverse-18.c: Add #pragma ms_struct to locations where we turn on pragma reverse_bitfields. * gcc.apple/bitreverse-3.c: Ditto. * gcc.apple/bitreverse-11.c: Ditto. * gcc.apple/bitreverse-15.c: Ditto. * gcc.apple/bitreverse-12.c: Ditto. * gcc.apple/bitreverse-16.c: Ditto. * gcc.apple/bitreverse-25.c: Ditto. * gcc.apple/bitreverse-1.c: Ditto. * gcc.apple/bitreverse-9.c: Ditto. * gcc.apple/bitreverse-17.c: Ditto. * gcc.apple/bitreverse-22.c: Ditto. * gcc.apple/bitreverse-26.c: Ditto. * gcc.apple/bitreverse-10.c: Ditto. * gcc.apple/bitreverse-14.c: Ditto. * g++.dg/bitreverse-10.C: Ditto. * g++.dg/bitreverse-23.C: Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/apple/200605-release@113361 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog.apple-ppc11
-rw-r--r--gcc/stor-layout.c363
-rw-r--r--gcc/testsuite/ChangeLog.apple-ppc33
-rw-r--r--gcc/testsuite/g++.dg/bitreverse-10.C11
-rw-r--r--gcc/testsuite/g++.dg/bitreverse-23.C3
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-1.c1
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-10.c1
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-11.c1
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-12.c1
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-13.c233
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-14.c1
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-15.c1
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-16.c1
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-17.c2
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-18.c1
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-19.c44
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-2.c88
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-20.c38
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-21.c145
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-22.c1
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-24.c77
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-25.c1
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-26.c1
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-27.c37
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-3.c1
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-4.c92
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-5.c92
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-6.c93
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-7.c94
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-8.c90
-rw-r--r--gcc/testsuite/gcc.apple/bitreverse-9.c1
-rw-r--r--gcc/tree.h5
32 files changed, 235 insertions, 1329 deletions
diff --git a/gcc/ChangeLog.apple-ppc b/gcc/ChangeLog.apple-ppc
index 36cd241c59d..53805cfa89d 100644
--- a/gcc/ChangeLog.apple-ppc
+++ b/gcc/ChangeLog.apple-ppc
@@ -1,3 +1,14 @@
+2006-04-27 Eric Christopher <echristo@apple.com>
+
+ Radar 4454599
+ Radar 4481146
+ * stor-layout.c (update_alignment_for_field): Unconditionalize
+ ms_bitfield_layout_p code. Handle non-bitfield fields. Remove
+ extra alignment code.
+ (place_field): Don't realign if ms_bitfield_layout_p. Unconditionalize
+ ms_bitfield_layout_p code. Rewrite handling of structure fields.
+ Rewrite bitfield reversal handling.
+
2006-04-27 Hui-May Chang <hm.chang@apple.com>
Radar 4314956
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index aab8d098fdc..0eedc3afdf0 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -360,7 +360,7 @@ layout_decl (tree decl, unsigned int known_align)
&& ! DECL_PACKED (decl)
&& ! targetm.ms_bitfield_layout_p (DECL_FIELD_CONTEXT (decl)))
{
-#ifdef PCC_BITFIELD_TYPE_MATTERS
+#ifdef PCC_BITFIELD_TYPE_MATTRS
if (PCC_BITFIELD_TYPE_MATTERS)
do_type_align (type, decl);
else
@@ -547,11 +547,6 @@ start_record_layout (tree t)
rli->prev_field = 0;
rli->pending_statics = 0;
rli->packed_maybe_necessary = 0;
- /* APPLE LOCAL begin bitfield reversal */
- rli->among_reversed_bitfields = 0;
- rli->reversed_bitfield_type_size = 0;
- rli->reversed_bitfield_bitpos = 0;
- /* APPLE LOCAL end bitfield reversal */
return rli;
}
@@ -625,6 +620,10 @@ debug_rli (record_layout_info rli)
fprintf (stderr, "\naligns: rec = %u, unpack = %u, off = %u\n",
rli->record_align, rli->unpacked_align,
rli->offset_align);
+ /* APPLE LOCAL begin ms_struct */
+ if (rli->remaining_in_alignment)
+ fprintf (stderr, "remaining_in_alignment = %u\n", rli->remaining_in_alignment);
+ /* APPLE LOCAL end ms_struct */
if (rli->packed_maybe_necessary)
fprintf (stderr, "packed may be necessary\n");
@@ -706,7 +705,8 @@ update_alignment_for_field (record_layout_info rli, tree field,
/* Record must have at least as much alignment as any field.
Otherwise, the alignment of the field within the record is
meaningless. */
- if (is_bitfield && targetm.ms_bitfield_layout_p (rli->t))
+ /* APPLE LOCAL begin ms_struct */
+ if (targetm.ms_bitfield_layout_p (rli->t))
{
/* Here, the alignment of the underlying type of a bitfield can
affect the alignment of a record; even a zero-sized field
@@ -714,11 +714,12 @@ update_alignment_for_field (record_layout_info rli, tree field,
the type, except that for zero-size bitfields this only
applies if there was an immediately prior, nonzero-size
bitfield. (That's the way it is, experimentally.) */
- if (! integer_zerop (DECL_SIZE (field))
+ if (!is_bitfield
+ || (!integer_zerop (DECL_SIZE (field))
? ! DECL_PACKED (field)
: (rli->prev_field
&& DECL_BIT_FIELD_TYPE (rli->prev_field)
- && ! integer_zerop (DECL_SIZE (rli->prev_field))))
+ && !integer_zerop (DECL_SIZE (rli->prev_field)))))
{
unsigned int type_align = TYPE_ALIGN (type);
type_align = MAX (type_align, desired_align);
@@ -728,6 +729,7 @@ update_alignment_for_field (record_layout_info rli, tree field,
rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
}
}
+ /* APPLE LOCAL end ms_struct */
#ifdef PCC_BITFIELD_TYPE_MATTERS
else if (is_bitfield && PCC_BITFIELD_TYPE_MATTERS)
{
@@ -825,8 +827,6 @@ excess_unit_span (HOST_WIDE_INT byte_offset, HOST_WIDE_INT bit_offset,
}
#endif
-/* APPLE LOCAL begin bitfield reversal */
-/* 4401223 4401224 4420068 4317709 4431497 4433004 4430139 4436477 */
/* RLI contains information about the layout of a RECORD_TYPE. FIELD
is a FIELD_DECL to be added after those fields already present in
T. (FIELD is not actually added to the TYPE_FIELDS list here;
@@ -857,31 +857,7 @@ place_field (record_layout_info rli, tree field)
rli->pending_statics);
return;
}
- /* In C++ the list doesn't necessarily end with the last data member.
- There always seems to be a TYPE_DECL for the class type in this list
- which comes after all the data members, so use that to detect the end.
- In C this operation is done at list end (bottom of this function). */
- else if (targetm.reverse_bitfields_p (rli->t) && rli->among_reversed_bitfields
- && TREE_CODE (field) == TYPE_DECL && TREE_TYPE(field) == rli->t)
- {
- /* If we're at the end of the struct and there are dangling reversed bitfields,
- adjust rli->bitpos. Needed to get sizeof right. */
- /* Make sure we complete the current allocation unit (e.g. if we've used
- 16 of 32 bits these will be the ones at the right, we must move up to
- a 32 bit boundary). But, when pragma pack(1) is on, do not use the
- full allocation unit size (experiment indicates CW treats pack(1)
- different from other pack values, although the reason remains
- mysterious.) */
- unsigned int save_bitpos = rli->reversed_bitfield_bitpos;
- if (save_bitpos > 0 && rli->reversed_bitfield_type_size > save_bitpos
- && maximum_field_alignment != 8)
- save_bitpos = rli->reversed_bitfield_type_size;
-
- rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, bitsize_int (save_bitpos));
- normalize_rli (rli);
- rli->among_reversed_bitfields = 0;
- return;
- }
+
/* Enumerators and enum types which are local to this class need not
be laid out. Likewise for initialized constant fields. */
else if (TREE_CODE (field) != FIELD_DECL)
@@ -895,62 +871,15 @@ place_field (record_layout_info rli, tree field)
return;
}
- /* If we're at the non-bitfield terminating a run of reversed bitfields,
- or a bitfield that won't fit in the current unit of bitfield allocation,
- or a zero-sized field, adjust rli->bitpos by adding in the accumulated
- reversed sizes. Nonintuitively, it is correct to check DECL_BIT_FIELD here but
- DECL_BIT_FIELD_TYPE below; the information is moved by
- update_alignment_for_field. */
- if (targetm.reverse_bitfields_p (rli->t) && rli->among_reversed_bitfields
- && (!DECL_BIT_FIELD (field) || integer_zerop (DECL_SIZE (field))))
- {
- rli->among_reversed_bitfields = 0;
- rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos,
- bitsize_int (rli->reversed_bitfield_bitpos));
- normalize_rli (rli);
- }
- else if (targetm.reverse_bitfields_p (rli->t) && rli->among_reversed_bitfields
- && ((rli->reversed_bitfield_bitpos + TREE_INT_CST_LOW (DECL_SIZE (field))
- > TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (field))))))
- {
- /* In the case where the next bitfield won't fit in the allocation unit,
- make sure we complete the current allocation unit (e.g. if we've used
- 16 of 32 bits these will be the ones at the right, we must move up to
- a 32 bit boundary). Move to the correct boundary for the new allocation
- unit, if that's bigger (this boundary may be reduced by packing). */
- unsigned int save_bitpos = rli->reversed_bitfield_bitpos;
- unsigned int save_offset_align = rli->offset_align;
- unsigned int tsize = TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (field)));
- if (save_bitpos > 0 && rli->reversed_bitfield_type_size > save_bitpos)
- save_bitpos = rli->reversed_bitfield_type_size;
- if (save_bitpos > 0 && tsize > save_bitpos
- && (maximum_field_alignment == 0 || maximum_field_alignment >= tsize))
- save_bitpos = tsize;
-
- rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, bitsize_int (save_bitpos));
-
- /* For pack(1) etc. normalize to byte boundary only. */
- rli->offset_align = TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (field)));
- if (maximum_field_alignment != 0 && maximum_field_alignment < rli->offset_align)
- rli->offset_align = maximum_field_alignment;
- normalize_rli (rli);
- rli->offset_align = save_offset_align;
-
- rli->among_reversed_bitfields = 0;
- }
-
- /* If we're in the middle of a reversed bitfield run (this field is known to
- be another bitfield that will fit in the current allocation unit at this point)
- we don't want any alignment padding. */
- if (rli->among_reversed_bitfields)
- known_align = BIGGEST_ALIGNMENT;
/* Work out the known alignment so far. Note that A & (-A) is the
value of the least-significant bit in A that is one. */
- else if (! integer_zerop (rli->bitpos))
+ if (! integer_zerop (rli->bitpos))
{
int realoffset = tree_low_cst (rli->bitpos, 1);
+ /* APPLE LOCAL begin ms_struct */
if (targetm.reverse_bitfields_p (rli->t))
- realoffset += tree_low_cst (rli->offset, 1) * BITS_PER_UNIT;
+ realoffset += rli->remaining_in_alignment;
+ /* APPLE LOCAL end ms_struct */
known_align = realoffset & -realoffset;
}
else if (integer_zerop (rli->offset))
@@ -982,10 +911,14 @@ place_field (record_layout_info rli, tree field)
rli->packed_maybe_necessary = 1;
}
+ /* APPLE LOCAL begin ms_struct */
/* Does this field automatically have alignment it needs by virtue
- of the fields that precede it and the record's own alignment? */
- if (known_align < desired_align)
+ of the fields that precede it and the record's own alignment?
+ We already align ms_struct fields, so don't re-align them. */
+ if (known_align < desired_align
+ && !targetm.ms_bitfield_layout_p (rli->t))
{
+ /* APPLE LOCAL end ms_struct */
/* No, we need to skip space before this field.
Bump the cumulative size to multiple of field alignment. */
@@ -1122,10 +1055,8 @@ place_field (record_layout_info rli, tree field)
Note: for compatibility, we use the type size, not the type alignment
to determine alignment, since that matches the documentation */
-
- if (targetm.ms_bitfield_layout_p (rli->t)
- && ((DECL_BIT_FIELD_TYPE (field) && ! DECL_PACKED (field))
- || (rli->prev_field && ! DECL_PACKED (rli->prev_field))))
+ /* APPLE LOCAL begin ms_struct */
+ if (targetm.ms_bitfield_layout_p (rli->t))
{
/* At this point, either the prior or current are bitfields,
(possibly both), and we're dealing with MS packing. */
@@ -1133,7 +1064,7 @@ place_field (record_layout_info rli, tree field)
/* Is the prior field a bitfield? If so, handle "runs" of same
type size fields. */
- if (rli->prev_field /* necessarily a bitfield if it exists. */)
+ if (rli->prev_field)
{
/* If both are bitfields, nonzero, and the same size, this is
the middle of a run. Zero declared size fields are special
@@ -1152,18 +1083,69 @@ place_field (record_layout_info rli, tree field)
/* We're in the middle of a run of equal type size fields; make
sure we realign if we run out of bits. (Not decl size,
type size!) */
- HOST_WIDE_INT bitsize = tree_low_cst (DECL_SIZE (field), 0);
+ HOST_WIDE_INT bitsize = tree_low_cst (DECL_SIZE (field), 1);
if (rli->remaining_in_alignment < bitsize)
{
+ if (!targetm.reverse_bitfields_p (rli->t))
+ {
/* out of bits; bump up to next 'word'. */
rli->offset = DECL_FIELD_OFFSET (rli->prev_field);
+
rli->bitpos
= size_binop (PLUS_EXPR, TYPE_SIZE (type),
DECL_FIELD_BIT_OFFSET (rli->prev_field));
rli->prev_field = field;
rli->remaining_in_alignment
- = tree_low_cst (TYPE_SIZE (type), 0);
+ = tree_low_cst (TYPE_SIZE (type), 1);
+ }
+ else
+ {
+ /* "Use up" the remaining bits. */
+ rli->bitpos
+ = size_binop (PLUS_EXPR,
+ rli->bitpos,
+ size_binop
+ (MINUS_EXPR,
+ TYPE_SIZE (type),
+ bitsize_int (rli->remaining_in_alignment)));
+ rli->prev_field = field;
+ rli->remaining_in_alignment
+ = tree_low_cst (TYPE_SIZE (type), 1);
+
+ /* Move to the top end of the range. We'll add the bitfield
+ below. */
+ rli->bitpos
+ = size_binop (PLUS_EXPR,
+ rli->bitpos,
+ TYPE_SIZE (type));
+ }
+ }
+
+ /* We handle this here instead of later at the end of
+ field placement. */
+ if (targetm.reverse_bitfields_p (rli->t))
+ {
+ /* If we normalized within rli->remaining_in_alignment we'll
+ possibly need to add some bits. */
+ while ((tree_low_cst (rli->bitpos, 0) - bitsize) < 0)
+ {
+ rli->offset
+ = size_binop (MINUS_EXPR,
+ rli->offset,
+ fold_convert (sizetype, bitsize_one_node));
+ rli->bitpos
+ = size_binop (PLUS_EXPR,
+ rli->bitpos,
+ bitsize_int (BITS_PER_UNIT));
+ }
+
+ rli->bitpos = size_binop (MINUS_EXPR,
+ rli->bitpos,
+ bitsize_int (bitsize));
+
+ /* Ensure we don't go negative. */
+ gcc_assert (tree_low_cst (rli->bitpos, 0) >= 0);
}
rli->remaining_in_alignment -= bitsize;
@@ -1179,18 +1161,38 @@ place_field (record_layout_info rli, tree field)
Note: since the beginning of the field was aligned then
of course the end will be too. No round needed. */
+ if (!targetm.reverse_bitfields_p (rli->t))
+ {
+ if (!integer_zerop (DECL_SIZE (rli->prev_field))
+ && rli->remaining_in_alignment)
+ {
+ rli->bitpos
+ = size_binop (PLUS_EXPR, rli->bitpos,
+ bitsize_int (rli->remaining_in_alignment));
+ }
+ else
+ prev_saved = NULL;
+ }
+ else
+ {
+ /* Difference from above - even if we don't have anything
+ left in the alignment we should move up to the top of
+ the word. */
if (!integer_zerop (DECL_SIZE (rli->prev_field)))
{
- tree type_size = TYPE_SIZE (TREE_TYPE (rli->prev_field));
-
rli->bitpos
- = size_binop (PLUS_EXPR, type_size,
- DECL_FIELD_BIT_OFFSET (rli->prev_field));
+ = size_binop
+ (PLUS_EXPR, rli->bitpos,
+ size_binop (MINUS_EXPR,
+ TYPE_SIZE (TREE_TYPE (rli->prev_field)),
+ bitsize_int (rli->remaining_in_alignment)));
+
+ /* We'll reset this when we have bits to add. */
+ rli->remaining_in_alignment = 0;
}
else
- /* We "use up" size zero fields; the code below should behave
- as if the prior field was not a bitfield. */
prev_saved = NULL;
+ }
/* Cause a new bitfield to be captured, either this time (if
currently a bitfield) or next time we see one. */
@@ -1231,93 +1233,41 @@ place_field (record_layout_info rli, tree field)
&& host_integerp (TYPE_SIZE (TREE_TYPE (field)), 0)
&& host_integerp (DECL_SIZE (field), 0))
rli->remaining_in_alignment
- = tree_low_cst (TYPE_SIZE (TREE_TYPE(field)), 0)
- - tree_low_cst (DECL_SIZE (field), 0);
+ = tree_low_cst (TYPE_SIZE (TREE_TYPE(field)), 1)
+ - tree_low_cst (DECL_SIZE (field), 1);
/* Now align (conventionally) for the new type. */
- if (!DECL_PACKED(field))
- type_align = MAX(TYPE_ALIGN (type), type_align);
-
- if (prev_saved
- && DECL_BIT_FIELD_TYPE (prev_saved)
- /* If the previous bit-field is zero-sized, we've already
- accounted for its alignment needs (or ignored it, if
- appropriate) while placing it. */
- && ! integer_zerop (DECL_SIZE (prev_saved)))
- type_align = MAX (type_align,
- TYPE_ALIGN (TREE_TYPE (prev_saved)));
+ type_align = TYPE_ALIGN (TREE_TYPE (field));
if (maximum_field_alignment != 0)
type_align = MIN (type_align, maximum_field_alignment);
rli->bitpos = round_up (rli->bitpos, type_align);
+ /* If we're reversing add this to the field starting at the
+ "right" end of the alignment. */
+ if (targetm.reverse_bitfields_p (rli->t)
+ && DECL_BIT_FIELD_TYPE (field)
+ && !integer_zerop (DECL_SIZE (field)))
+ {
+ rli->bitpos = size_binop (MINUS_EXPR,
+ size_binop (PLUS_EXPR,
+ rli->bitpos,
+ TYPE_SIZE (type)),
+ DECL_SIZE (field));
+ }
+
/* If we really aligned, don't allow subsequent bitfields
to undo that. */
rli->prev_field = NULL;
}
+ /* Nothing we've done should let bitpos be negative. */
+ gcc_assert (tree_low_cst (rli->bitpos, 0) >= 0);
}
-
+ /* APPLE LOCAL end ms_struct */
/* Offset so far becomes the position of this field after normalizing. */
normalize_rli (rli);
- if (targetm.reverse_bitfields_p (rli->t) && DECL_BIT_FIELD_TYPE (field))
- {
- tree fsize = DECL_SIZE (field);
- tree tsize = TYPE_SIZE (TREE_TYPE (field));
- unsigned int tsize_int = TREE_INT_CST_LOW (tsize);
-
- if (!rli->among_reversed_bitfields)
- {
- unsigned int save_offset_align = rli->offset_align;
- unsigned int bitpos_int;
- /* Make sure current bit accumulation isn't too big for this basic type. */
- rli->offset_align = tsize_int;
- normalize_rli (rli);
- rli->offset_align = save_offset_align;
- /* If this field won't fit in current allocation unit, finish off the
- current allocation unit. Handle :0 here as well. */
- bitpos_int = TREE_INT_CST_LOW (rli->bitpos);
- if (tsize_int < (TREE_INT_CST_LOW (fsize) + TREE_INT_CST_LOW (rli->bitpos)))
- {
- if (bitpos_int > 0 && tsize_int > bitpos_int
- && (maximum_field_alignment == 0 || maximum_field_alignment >= tsize_int))
- rli->bitpos = tsize;
- if (TREE_INT_CST_LOW (fsize) == 0)
- rli->bitpos = tsize;
- rli->offset_align = tsize_int;
- if (maximum_field_alignment != 0 && maximum_field_alignment < rli->offset_align)
- rli->offset_align = maximum_field_alignment;
- }
- else
- {
- rli->offset_align = tsize_int;
- if (maximum_field_alignment != 0
- && maximum_field_alignment < rli->offset_align
- && maximum_field_alignment > 8) /* not for pack(1) !! */
- rli->offset_align = maximum_field_alignment;
- }
- normalize_rli (rli);
- rli->offset_align = save_offset_align;
-
- rli->among_reversed_bitfields = 1;
- rli->reversed_bitfield_bitpos = TREE_INT_CST_LOW (rli->bitpos);
- /* We're going to add the reversed-bitpos back into bitpos before doing
- anything with bitpos; set to zero now to get this to come out right. */
- rli->bitpos = bitsize_zero_node;
- }
- DECL_FIELD_BIT_OFFSET (field) = size_binop (MINUS_EXPR,
- size_binop (MINUS_EXPR, tsize, fsize),
- bitsize_int (rli->reversed_bitfield_bitpos));
- rli->reversed_bitfield_bitpos += TREE_INT_CST_LOW (fsize);
- rli->reversed_bitfield_type_size = TREE_INT_CST_LOW (tsize);
- /* Do not advance rli->bitpos, as we don't want normalize_rli perturbing things.
- Its model is that bits are allocated monotonically from one end of the struct
- (possibly skipping over holes); things are not like that with reversal.
- Instead, keep a separate total of "bits within the current group of reversed
- bitfields", and add that into bitpos when we complete a group. */
- }
- else
DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
DECL_FIELD_OFFSET (field) = rli->offset;
SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
@@ -1366,37 +1316,62 @@ place_field (record_layout_info rli, tree field)
rli->bitpos = bitsize_zero_node;
rli->offset_align = MIN (rli->offset_align, desired_align);
}
- else if (targetm.reverse_bitfields_p (rli->t) && rli->among_reversed_bitfields)
+ /* APPLE LOCAL begin ms_struct */
+ else if (targetm.ms_bitfield_layout_p (rli->t))
{
- /* If we're at the end of the struct and there are dangling reversed bitfields,
- adjust rli->bitpos. Needed to get sizeof right.
- C++ doesn't terminate the field list with a null; there always seems to be
- a TYPE_DECL==rli->t after all data members, which was detected above. */
- if (TREE_CHAIN (field) == NULL_TREE)
+ if (!targetm.reverse_bitfields_p (rli->t))
+ {
+ rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
+
+ /* If this is the last element in the struct fill out the rest of
+ the struct - this is only used when we would have packed a bitfield
+ into less than the base type size of the field type. */
+ if ((TREE_CHAIN (field) == NULL
+ || TREE_CODE (TREE_CHAIN (field)) != FIELD_DECL)
+ && DECL_BIT_FIELD_TYPE (field)
+ && !integer_zerop (DECL_SIZE (field)))
+ rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos,
+ bitsize_int (rli->remaining_in_alignment));
+ }
+ else
{
- /* Make sure we complete the current allocation unit (e.g. if we've used
- 16 of 32 bits these will be the ones at the right, we must move up to
- a 32 bit boundary). But, when pragma pack(1) is on, do not use the
- full allocation unit size (experiment indicates CW treats pack(1)
- different from other pack values, although the reason remains
- mysterious.) */
- unsigned int save_bitpos = rli->reversed_bitfield_bitpos;
- if (save_bitpos > 0 && rli->reversed_bitfield_type_size > save_bitpos
- && maximum_field_alignment != 8)
- save_bitpos = rli->reversed_bitfield_type_size;
-
- rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, bitsize_int (save_bitpos));
- normalize_rli (rli);
- rli->among_reversed_bitfields = 0;
+ unsigned int extension = 0;
+
+ if (integer_zerop (DECL_SIZE (field))
+ && rli->remaining_in_alignment
+ && rli->prev_field
+ && DECL_BIT_FIELD_TYPE (rli->prev_field)
+ && !integer_zerop (DECL_SIZE (rli->prev_field)))
+ extension =
+ tree_low_cst (TYPE_SIZE (TREE_TYPE (rli->prev_field)), 1)
+ - rli->remaining_in_alignment;
+ else if (!integer_zerop (DECL_SIZE (field)))
+ extension =
+ tree_low_cst (TYPE_SIZE (TREE_TYPE (field)), 1)
+ - rli->remaining_in_alignment;
+
+ /* For bitfields we handled the adding of the type earlier. */
+ if (!DECL_BIT_FIELD_TYPE (field))
+ rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
+
+ /* For reverse bitfields we need to go back to the end of the type. */
+ if (extension
+ && (TREE_CHAIN (field) == NULL
+ || TREE_CODE (TREE_CHAIN (field)) != FIELD_DECL)
+ && DECL_BIT_FIELD_TYPE (field))
+ rli->bitpos = size_binop (PLUS_EXPR,
+ rli->bitpos,
+ bitsize_int (extension));
}
+ normalize_rli (rli);
}
+ /* APPLE LOCAL end ms_struct */
else
{
rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
normalize_rli (rli);
}
}
-/* APPLE LOCAL end bitfield reversal */
/* Assuming that all the fields have been laid out, this function uses
RLI to compute the final TYPE_SIZE, TYPE_ALIGN, etc. for the type
diff --git a/gcc/testsuite/ChangeLog.apple-ppc b/gcc/testsuite/ChangeLog.apple-ppc
index 67dcdc681d2..2d125605d83 100644
--- a/gcc/testsuite/ChangeLog.apple-ppc
+++ b/gcc/testsuite/ChangeLog.apple-ppc
@@ -1,3 +1,36 @@
+2006-04-28 Eric Christopher <echristo@apple.com>
+
+ Radar 4454599
+ * gcc.apple/bitreverse-13.c: Remove.
+ * gcc.apple/bitreverse-19.c: Ditto.
+ * gcc.apple/bitreverse-2.c: Ditto.
+ * gcc.apple/bitreverse-20.c: Ditto.
+ * gcc.apple/bitreverse-21.c: Ditto.
+ * gcc.apple/bitreverse-24.c: Ditto.
+ * gcc.apple/bitreverse-27.c: Ditto.
+ * gcc.apple/bitreverse-4.c: Ditto.
+ * gcc.apple/bitreverse-5.c: Ditto.
+ * gcc.apple/bitreverse-6.c: Ditto.
+ * gcc.apple/bitreverse-7.c: Ditto.
+ * gcc.apple/bitreverse-8.c: Ditto.
+ * gcc.apple/bitreverse-18.c: Add #pragma ms_struct
+ to locations where we turn on pragma reverse_bitfields.
+ * gcc.apple/bitreverse-3.c: Ditto.
+ * gcc.apple/bitreverse-11.c: Ditto.
+ * gcc.apple/bitreverse-15.c: Ditto.
+ * gcc.apple/bitreverse-12.c: Ditto.
+ * gcc.apple/bitreverse-16.c: Ditto.
+ * gcc.apple/bitreverse-25.c: Ditto.
+ * gcc.apple/bitreverse-1.c: Ditto.
+ * gcc.apple/bitreverse-9.c: Ditto.
+ * gcc.apple/bitreverse-17.c: Ditto.
+ * gcc.apple/bitreverse-22.c: Ditto.
+ * gcc.apple/bitreverse-26.c: Ditto.
+ * gcc.apple/bitreverse-10.c: Ditto.
+ * gcc.apple/bitreverse-14.c: Ditto.
+ * g++.dg/bitreverse-10.C: Ditto.
+ * g++.dg/bitreverse-23.C: Ditto.
+
2006-04-27 Hui-May Chang <hm.chang@apple.com>
Radar 4314956
diff --git a/gcc/testsuite/g++.dg/bitreverse-10.C b/gcc/testsuite/g++.dg/bitreverse-10.C
index 8e22c88b63e..28f9cb60d77 100644
--- a/gcc/testsuite/g++.dg/bitreverse-10.C
+++ b/gcc/testsuite/g++.dg/bitreverse-10.C
@@ -3,10 +3,10 @@
extern "C" void abort();
typedef struct TestStateNorm
{
- unsigned int fBlah : 7; //
+ unsigned int fBlah : 7; //
unsigned int fUnused : 2; // Currently Unused
unsigned int : 0;
- unsigned int fBlah2 : 7; //
+ unsigned int fBlah2 : 7; //
unsigned int fUnused2: 2; // Currently Unused
} TestStateNorm;
@@ -18,12 +18,13 @@ union u1 {
} unorm = { 5, 1, 6, 2 };
#pragma reverse_bitfields on
-typedef struct TestState
+#pragma ms_struct on
+typedef struct TestState
{
- unsigned int fBlah : 7; //
+ unsigned int fBlah : 7; //
unsigned int fUnused : 2; // Currently Unused
unsigned int : 0;
- unsigned int fBlah2 : 7; //
+ unsigned int fBlah2 : 7; //
unsigned int fUnused2 : 2; // Currently Unused
} TestState;
diff --git a/gcc/testsuite/g++.dg/bitreverse-23.C b/gcc/testsuite/g++.dg/bitreverse-23.C
index 50710b9dab8..b8df433702f 100644
--- a/gcc/testsuite/g++.dg/bitreverse-23.C
+++ b/gcc/testsuite/g++.dg/bitreverse-23.C
@@ -4,7 +4,8 @@ extern "C" void abort();
/* Check that layout works in presence of things other than
data members. */
#pragma reverse_bitfields on
-class X {
+#pragma ms_struct on
+class X {
public:
int x : 8;
static int y;
diff --git a/gcc/testsuite/gcc.apple/bitreverse-1.c b/gcc/testsuite/gcc.apple/bitreverse-1.c
index 4a38bca6bb6..8a012f49c26 100644
--- a/gcc/testsuite/gcc.apple/bitreverse-1.c
+++ b/gcc/testsuite/gcc.apple/bitreverse-1.c
@@ -25,6 +25,7 @@
#pragma reverse_bitfields on
+#pragma ms_struct on
typedef struct
{
diff --git a/gcc/testsuite/gcc.apple/bitreverse-10.c b/gcc/testsuite/gcc.apple/bitreverse-10.c
index 06fd4db922b..2656ed24ade 100644
--- a/gcc/testsuite/gcc.apple/bitreverse-10.c
+++ b/gcc/testsuite/gcc.apple/bitreverse-10.c
@@ -19,6 +19,7 @@ union {
} unorm = { 5, 1, 6, 2 };
#pragma reverse_bitfields on
+#pragma ms_struct on
typedef struct TestState
{
unsigned int fBlah : 7; //
diff --git a/gcc/testsuite/gcc.apple/bitreverse-11.c b/gcc/testsuite/gcc.apple/bitreverse-11.c
index 70e63c2d7ec..6af03f5275d 100644
--- a/gcc/testsuite/gcc.apple/bitreverse-11.c
+++ b/gcc/testsuite/gcc.apple/bitreverse-11.c
@@ -6,6 +6,7 @@
extern void abort(void);
#pragma reverse_bitfields on
+#pragma ms_struct on
typedef struct
{
diff --git a/gcc/testsuite/gcc.apple/bitreverse-12.c b/gcc/testsuite/gcc.apple/bitreverse-12.c
index 3e8d5d8c6a8..d28615106cd 100644
--- a/gcc/testsuite/gcc.apple/bitreverse-12.c
+++ b/gcc/testsuite/gcc.apple/bitreverse-12.c
@@ -4,6 +4,7 @@
/* { dg-options "-w" } */
#pragma reverse_bitfields on
+#pragma ms_struct on
#pragma pack(1)
typedef struct _bee
diff --git a/gcc/testsuite/gcc.apple/bitreverse-13.c b/gcc/testsuite/gcc.apple/bitreverse-13.c
deleted file mode 100644
index 5d3d153f682..00000000000
--- a/gcc/testsuite/gcc.apple/bitreverse-13.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/* APPLE LOCAL file 4350099 */
-/* { dg-do run { target powerpc*-*-darwin* } } */
-extern void abort ();
-extern int printf(const char *, ...);
-typedef struct _foo1 FOO1;
-
-struct _foo1
-{
- unsigned int fTab:1,
- fSpace:1,
- fComma:1,
- fSemiColon:1,
- fCustom:1,
- fConsecutive:1,
- iTextDelm:2,
- chCustom:16;
-};
-
-FOO1 vDelim1 = {1, 0, 0, 0, 0, 0, 0, 0};
-void f1() {
- union {
- unsigned int x;
- FOO1 y;
- } u;
- u.y = vDelim1;
- if (u.x != 0x80000000U)
- abort ();
-}
-/***********************************************/
-#pragma reverse_bitfields on
-
-typedef struct _foo2 FOO2;
-
-struct _foo2
-{
- unsigned int fTab:1,
- fSpace:1,
- fComma:1,
- fSemiColon:1,
- fCustom:1,
- fConsecutive:1,
- iTextDelm:2,
- chCustom:16;
-};
-
-FOO2 vDelim2 = {1, 0, 0, 0, 0, 0, 0, 0};
-void f2() {
- union {
- unsigned int x;
- FOO2 y;
- } u;
- u.y = vDelim2;
- if (u.x != 1)
- abort();
-}
-#pragma reverse_bitfields off
-/****************************************************/
-#pragma reverse_bitfields on
-
-typedef struct _foo3 FOO3;
-
-#pragma reverse_bitfields off
-struct _foo3
-{
- unsigned int fTab:1,
- fSpace:1,
- fComma:1,
- fSemiColon:1,
- fCustom:1,
- fConsecutive:1,
- iTextDelm:2,
- chCustom:16;
-};
-
-FOO3 vDelim3 = {1, 0, 0, 0, 0, 0, 0, 0};
-void f3() {
- union {
- unsigned int x;
- FOO3 y;
- } u;
- u.y = vDelim3;
- if (u.x != 0x80000000U)
- abort ();
-}
-#pragma reverse_bitfields off
-/****************************************************/
-#pragma reverse_bitfields on
-
-struct _foo4
-{
- unsigned int fTab:1,
- fSpace:1,
- fComma:1,
- fSemiColon:1,
- fCustom:1,
- fConsecutive:1,
- iTextDelm:2,
- chCustom:16;
-};
-
-typedef struct _foo4 FOO4;
-
-FOO4 vDelim4 = {1, 0, 0, 0, 0, 0, 0, 0};
-void f4() {
- union {
- unsigned int x;
- FOO4 y;
- } u;
- u.y = vDelim4;
- if (u.x != 1)
- abort();
-}
-#pragma reverse_bitfields off
-/****************************************************/
-#pragma reverse_bitfields on
-
-struct _foo5
-{
- unsigned int fTab:1,
- fSpace:1,
- fComma:1,
- fSemiColon:1,
- fCustom:1,
- fConsecutive:1,
- iTextDelm:2,
- chCustom:16;
-};
-
-#pragma reverse_bitfields off
-typedef struct _foo5 FOO5;
-
-FOO5 vDelim5 = {1, 0, 0, 0, 0, 0, 0, 0};
-void f5() {
- union {
- unsigned int x;
- FOO5 y;
- } u;
- u.y = vDelim5;
- if (u.x != 1)
- abort();
-}
-#pragma reverse_bitfields off
-/****************************************************/
-#pragma reverse_bitfields off
-
-typedef struct _foo6 FOO6;
-
-#pragma reverse_bitfields on
-struct _foo6
-{
- unsigned int fTab:1,
- fSpace:1,
- fComma:1,
- fSemiColon:1,
- fCustom:1,
- fConsecutive:1,
- iTextDelm:2,
- chCustom:16;
-};
-
-FOO6 vDelim6 = {1, 0, 0, 0, 0, 0, 0, 0};
-void f6() {
- union {
- unsigned int x;
- FOO6 y;
- } u;
- u.y = vDelim6;
- if (u.x != 1)
- abort();
-}
-#pragma reverse_bitfields off
-/****************************************************/
-#pragma reverse_bitfields off
-
-struct _foo7
-{
- unsigned int fTab:1,
- fSpace:1,
- fComma:1,
- fSemiColon:1,
- fCustom:1,
- fConsecutive:1,
- iTextDelm:2,
- chCustom:16;
-};
-
-typedef struct _foo7 FOO7;
-
-FOO7 vDelim7 = {1, 0, 0, 0, 0, 0, 0, 0};
-void f7() {
- union {
- unsigned int x;
- FOO7 y;
- } u;
- u.y = vDelim7;
- if (u.x != 0x80000000U)
- abort ();
-}
-#pragma reverse_bitfields off
-/****************************************************/
-#pragma reverse_bitfields off
-
-struct _foo8
-{
- unsigned int fTab:1,
- fSpace:1,
- fComma:1,
- fSemiColon:1,
- fCustom:1,
- fConsecutive:1,
- iTextDelm:2,
- chCustom:16;
-};
-
-#pragma reverse_bitfields on
-typedef struct _foo8 FOO8;
-
-FOO8 vDelim8 = {1, 0, 0, 0, 0, 0, 0, 0};
-void f8() {
- union {
- unsigned int x;
- FOO8 y;
- } u;
- u.y = vDelim8;
- if (u.x != 0x80000000U)
- abort ();
-}
-#pragma reverse_bitfields off
-/****************************************************/
-main() {
- f1(); f2(); f3(); f4(); f5(); f6(); f7(); f8();
- return 0;
-}
diff --git a/gcc/testsuite/gcc.apple/bitreverse-14.c b/gcc/testsuite/gcc.apple/bitreverse-14.c
index 4b7790cf824..ed73891c9b9 100644
--- a/gcc/testsuite/gcc.apple/bitreverse-14.c
+++ b/gcc/testsuite/gcc.apple/bitreverse-14.c
@@ -2,6 +2,7 @@
/* { dg-do compile { target powerpc*-*-darwin* } } */
/* { dg-options "-std=gnu99" } */
#pragma reverse_bitfields on
+#pragma ms_struct on
#pragma pack(push, 1)
typedef struct _kyc
diff --git a/gcc/testsuite/gcc.apple/bitreverse-15.c b/gcc/testsuite/gcc.apple/bitreverse-15.c
index 80f544445e0..6303aa20dcd 100644
--- a/gcc/testsuite/gcc.apple/bitreverse-15.c
+++ b/gcc/testsuite/gcc.apple/bitreverse-15.c
@@ -3,6 +3,7 @@
/* { dg-options "-std=gnu99" } */
extern void abort();
#pragma reverse_bitfields on
+#pragma ms_struct on
#pragma pack(push,2)
typedef struct _S2
{
diff --git a/gcc/testsuite/gcc.apple/bitreverse-16.c b/gcc/testsuite/gcc.apple/bitreverse-16.c
index ee9876b02aa..d3ef99f02f9 100644
--- a/gcc/testsuite/gcc.apple/bitreverse-16.c
+++ b/gcc/testsuite/gcc.apple/bitreverse-16.c
@@ -3,6 +3,7 @@ extern void abort();
/* { dg-do run { target powerpc*-*-darwin* } } */
/* { dg-options "-std=gnu99" } */
#pragma reverse_bitfields on
+#pragma ms_struct on
#pragma pack(push,2)
typedef struct _S5
diff --git a/gcc/testsuite/gcc.apple/bitreverse-17.c b/gcc/testsuite/gcc.apple/bitreverse-17.c
index bfc0c0f5a34..f6cf1ce0bd6 100644
--- a/gcc/testsuite/gcc.apple/bitreverse-17.c
+++ b/gcc/testsuite/gcc.apple/bitreverse-17.c
@@ -5,6 +5,7 @@
/* { dg-options "-std=gnu99" } */
#pragma reverse_bitfields on
+#pragma ms_struct on
struct empty {};
struct uc0 { unsigned char content[0]; };
@@ -69,4 +70,3 @@ int main() {
return 42;
return 0;
}
- \ No newline at end of file
diff --git a/gcc/testsuite/gcc.apple/bitreverse-18.c b/gcc/testsuite/gcc.apple/bitreverse-18.c
index 8103aa080f7..e1ece81b781 100644
--- a/gcc/testsuite/gcc.apple/bitreverse-18.c
+++ b/gcc/testsuite/gcc.apple/bitreverse-18.c
@@ -9,6 +9,7 @@ typedef unsigned short WORD;
typedef unsigned int DWORD;
#pragma reverse_bitfields on
+#pragma ms_struct on
#define USE_STRUCT_WRAPPER 0
diff --git a/gcc/testsuite/gcc.apple/bitreverse-19.c b/gcc/testsuite/gcc.apple/bitreverse-19.c
deleted file mode 100644
index 596c6745375..00000000000
--- a/gcc/testsuite/gcc.apple/bitreverse-19.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* APPLE LOCAL file 4430139 */
-
-/* CW layout of this one is truly bizarre:
- 0000000000aaaaaabbbbbbbbbb000000
- 0000000000cccccccccccccccccccccc
-*/
-
-extern void abort();
-/* { dg-do run { target powerpc*-*-darwin* } } */
-/* { dg-options "-std=gnu99" } */
-typedef unsigned short WORD;
-typedef unsigned int DWORD;
-
-#pragma reverse_bitfields on
-
-#define USE_STRUCT_WRAPPER 0
-
-#pragma pack(push, 2)
-typedef struct
-{
- short a : 6;
- int b : 10;
- int c : 22;
-} Foo;
-typedef union { Foo x; int y[6]; } u1;
-#pragma pack(pop)
-
-
-int main(int argc, char* argv[])
-{
- int i;
- u1 U;
- for (i=0; i<6; i++)
- U.y[i] = 0;
- U.x.a = 1;
- U.x.b = 3;
- U.x.c = 5;
-
- if (sizeof(Foo) != 8
- || U.y[0] != 0x000100c0
- || U.y[1] != 0x00000005)
- abort();
- return 0;
-}
diff --git a/gcc/testsuite/gcc.apple/bitreverse-2.c b/gcc/testsuite/gcc.apple/bitreverse-2.c
deleted file mode 100644
index ef74d8eb3ea..00000000000
--- a/gcc/testsuite/gcc.apple/bitreverse-2.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/* APPLE LOCAL file */
-#include <stdio.h>
-#include <string.h>
-
-/* Tests interleaving of bitfields and non-bitfields. Note that they
- overlap, so the code cannot possibly work, but bug compability is
- the requirement. */
-
-/* { dg-do run { target powerpc*-*-darwin* } } */
-
-#pragma reverse_bitfields on
-
-typedef struct
-{
- union
- {
- unsigned int i1;
- struct
- {
- unsigned int b1: 1;
- unsigned int b2: 2;
- unsigned int b3: 4;
- unsigned int b4: 8;
- unsigned int b5: 16;
- } bits;
- } u1;
- char baz;
- union
- {
- struct
- {
- unsigned int i2;
- unsigned int i3;
- unsigned int i4;
- } ints;
-
- struct
- {
- unsigned int b1: 16;
- unsigned int b2: 8;
- unsigned int b3: 4;
- unsigned int b4: 2;
- unsigned int b5: 1;
- char baz;
- unsigned int b6: 2;
- unsigned int b7: 4;
- char baz2;
- unsigned int b8: 8;
- unsigned int b9: 16;
- } bits;
- } u2;
-} Bitfields;
-
-
-int main()
-{
- Bitfields bitfields;
-
-
- memset(&bitfields, 0, sizeof(bitfields));
-
- bitfields.u1.bits.b1 = 1;
- bitfields.u1.bits.b2 = 1;
- bitfields.u1.bits.b3 = 1;
- bitfields.u1.bits.b4 = 1;
- bitfields.u1.bits.b5 = 1;
- bitfields.baz = 0x55;
- bitfields.u2.bits.b1 = 1;
- bitfields.u2.bits.b2 = 1;
- bitfields.u2.bits.b3 = 1;
- bitfields.u2.bits.b4 = 1;
- bitfields.u2.bits.b5 = 1;
- bitfields.u2.bits.baz = 0xaa; /* { dg-warning "overflow in implicit constant conversion" } */
- bitfields.u2.bits.b6 = 1;
- bitfields.u2.bits.b7 = 1;
- bitfields.u2.bits.baz2 = 0x33;
- bitfields.u2.bits.b8 = 1;
- bitfields.u2.bits.b9 = 1;
-
- if (bitfields.u1.i1 != 0x0000808b
- || bitfields.baz != 0x55
- || bitfields.u2.ints.i2 != 0x51010001
- || bitfields.u2.ints.i3 != 0x01003300
- || bitfields.u2.ints.i4 != 0x00000001
- || sizeof(bitfields) != 20)
- return 42;
- return 0;
-}
diff --git a/gcc/testsuite/gcc.apple/bitreverse-20.c b/gcc/testsuite/gcc.apple/bitreverse-20.c
deleted file mode 100644
index 5e7726d3416..00000000000
--- a/gcc/testsuite/gcc.apple/bitreverse-20.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* APPLE LOCAL file 4430139 */
-/* Same as bitreverse-19 without #pragma pack; it makes
- no difference in this case. */
-
-extern void abort();
-/* { dg-do run { target powerpc*-*-darwin* } } */
-/* { dg-options "-std=gnu99" } */
-typedef unsigned short WORD;
-typedef unsigned int DWORD;
-
-#pragma reverse_bitfields on
-
-#define USE_STRUCT_WRAPPER 0
-
-typedef struct
-{
- short a : 6;
- int b : 10;
- int c : 22;
-} Foo;
-typedef union { Foo x; int y[6]; } u1;
-
-int main(int argc, char* argv[])
-{
- int i;
- u1 U;
- for (i=0; i<6; i++)
- U.y[i] = 0;
- U.x.a = 1;
- U.x.b = 3;
- U.x.c = 5;
-
- if (sizeof(Foo) != 8
- || U.y[0] != 0x000100c0
- || U.y[1] != 0x00000005)
- abort();
- return 0;
-}
diff --git a/gcc/testsuite/gcc.apple/bitreverse-21.c b/gcc/testsuite/gcc.apple/bitreverse-21.c
deleted file mode 100644
index 7b109f74e99..00000000000
--- a/gcc/testsuite/gcc.apple/bitreverse-21.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/* APPLE LOCAL file from 4431497 */
-/* Some truly bizarre layouts by CW. */
-/* { dg-do run { target powerpc*-*-darwin* } } */
-/* { dg-options "-std=gnu99" } */
-extern void abort();
-#pragma reverse_bitfields on
-
-#pragma pack(push,1)
-typedef struct _S3
-{
- unsigned char c1 : 8;
- unsigned short s1 : 8;
- unsigned short s2 : 8;
-} S3;
-
-typedef struct _S3W
-{
- S3 s3;
- unsigned char c;
-}S3W;
-/* c1 and s1 overlap. c and s2 overlap.
- Size is 3 although 4 bytes are accessed. */
-#pragma pack(pop)
-
-typedef union u3 { S3W ss; unsigned int v[6]; } U3;
-
-int TestS3(void)
-{
- U3 u = {0};
- u.ss.s3.c1 = 0x56;
- u.ss.s3.s1 = 0x78;
- u.ss.c = 0x90;
- u.ss.s3.s2 = 0xab;
-
- if (sizeof(S3) != 3 || sizeof(S3W) != 4 ||
- u.ss.s3.s1 != 0x78 || u.ss.s3.s2 != 0xab ||
- u.ss.s3.c1 != 0x78 || u.ss.c != 0xab ||
- u.v[0] != 0x780000ab || u.v[1] != 0x00000000)
- abort();
- return 0;
-}
-
-#pragma pack(push, 2)
-typedef struct _S4
-{
- unsigned char c1 : 8;
- unsigned short s1 : 8;
- unsigned short s2 : 8;
-} S4;
-
-typedef struct _S4W
-{
- S4 s4;
- unsigned char c;
-}S4W;
-/* c1 and s1 overlap. */
-#pragma pack(pop)
-
-typedef union u4 { S4W ss; unsigned int v[6]; } U4;
-
-int TestS4(void)
-{
- U4 u = {0};
- u.ss.s4.c1 = 0x56;
- u.ss.s4.s1 = 0x78;
- u.ss.s4.s2 = 0xab;
- u.ss.c = 0x90;
-
- if (sizeof(S4) != 4 || sizeof(S4W) != 6 ||
- u.ss.s4.s1 != 0x78 || u.ss.s4.s2 != 0xab ||
- u.ss.s4.c1 != 0x78 || u.ss.c != 0x90 ||
- u.v[0] != 0x780000ab || u.v[1] != 0x90000000)
- abort();
- return 0;
-}
-
-#pragma pack(push,1)
-typedef struct _S5
-{
- unsigned short s : 16;
- unsigned int l1 : 16;
- unsigned int l2 : 16;
-} S5;
-
-typedef struct _S5W
-{
- S5 s5;
- unsigned short s;
-}S5W;
-/* l1 and s5.s overlap. l2 and s overlap. Size is 6
- although 8 bytes are referenced. */
-#pragma pack(pop)
-
-typedef union u5 { S5W ss; unsigned int v[6]; } U5;
-
-int TestS5(void)
-{
- U5 u = {0};
- u.ss.s5.s = 0x5678;
- u.ss.s5.l1 = 0x1289;
- u.ss.s = 0xabcd;
- u.ss.s5.l2 = 0xfe34;
- if (sizeof(S5) != 6 || sizeof(S5W) != 8 ||
- u.ss.s5.l1 != 0x1289 || u.ss.s5.l2 != 0xfe34 ||
- u.ss.s5.s != 0x1289 || u.ss.s != 0xfe34 ||
- u.v[0] != 0x12890000 || u.v[1] != 0x0000fe34 || u.v[2] != 0x00000000)
- abort();
- return 0;
-}
-
-#pragma pack(push,2)
-typedef struct _S6
-{
- unsigned short s : 16;
- unsigned int l1 : 16;
- unsigned int l2 : 16;
-} S6;
-
-typedef struct _S6W
-{
- S6 s6;
- unsigned short s;
-}S6W;
-#pragma pack(pop)
-
-typedef union u6 { S6W ss; unsigned int v[6]; } U6;
-
-int TestS6(void)
-{
- U6 u = {0};
- u.ss.s6.s = 0x5678;
- u.ss.s6.l1 = 0x9123;
- u.ss.s = 0xabcd;
- u.ss.s6.l2 = 0xef04;
- if (sizeof(S6) != 8 || sizeof(S6W) != 10 ||
- u.ss.s6.l1 != 0x9123 || u.ss.s6.l2 != 0xef04 ||
- u.ss.s6.s != 0x9123 || u.ss.s != 0xabcd ||
- u.v[0] != 0x91230000 || u.v[1] != 0x0000ef04 || u.v[2] != 0xabcd0000)
- abort();
- return 0;
-}
-int main()
-{
- return TestS3() + TestS4() + TestS5() + TestS6();
-}
diff --git a/gcc/testsuite/gcc.apple/bitreverse-22.c b/gcc/testsuite/gcc.apple/bitreverse-22.c
index 949a1245745..faa92be0602 100644
--- a/gcc/testsuite/gcc.apple/bitreverse-22.c
+++ b/gcc/testsuite/gcc.apple/bitreverse-22.c
@@ -5,6 +5,7 @@ extern void abort();
/* { dg-options "-std=gnu99" } */
#pragma reverse_bitfields on
+#pragma ms_struct on
typedef struct _S5
{
diff --git a/gcc/testsuite/gcc.apple/bitreverse-24.c b/gcc/testsuite/gcc.apple/bitreverse-24.c
deleted file mode 100644
index 5a3f9e5f876..00000000000
--- a/gcc/testsuite/gcc.apple/bitreverse-24.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* APPLE LOCAL file 4430139 */
-extern void abort();
-#include <string.h>
-/* This is bitreverse-18 with d and e switched.
- Note that this changes the layout and even the size. */
-
-/* { dg-do run { target powerpc*-*-darwin* } } */
-/* { dg-options "-std=gnu99" } */
-
-typedef unsigned short WORD;
-typedef unsigned int DWORD;
-
-#pragma reverse_bitfields on
-
-#define USE_STRUCT_WRAPPER 0
-
-#pragma pack(push, 2)
-typedef struct
-{
- DWORD a;
-#if USE_STRUCT_WRAPPER
- struct {
-#endif
- WORD b:2,
- c:14;
-#if USE_STRUCT_WRAPPER
- };
-#endif
- DWORD d:10,
- e:22;
- DWORD f;
- DWORD g:25,
- h:1,
- i:6;
-#if USE_STRUCT_WRAPPER
- struct {
-#endif
- WORD j:14,
- k:2;
-#if USE_STRUCT_WRAPPER
- };
-#endif
-} Foo;
-typedef union { Foo x; int y[6]; } u1;
-#pragma pack(pop)
-
-
-int main(int argc, char* argv[])
-{
- Foo foo;
- int i;
- u1 U;
- memset (&U, 0, sizeof(u1));
- U.x.a = 1;
- U.x.b = 1;
- U.x.c = 1;
- U.x.d = 1;
- U.x.e = 1;
- U.x.f = 1;
- U.x.g = 1;
- U.x.h = 1;
- U.x.i = 1;
- U.x.j = 1;
- U.x.k = 1;
-
- int s = sizeof(Foo);
-
- if (sizeof(Foo) != 22
- || U.y[0] != 0x00000001
- || U.y[1] != 0x00010000
- || U.y[2] != 0x00000001
- || U.y[3] != 0x00000001
- || U.y[4] != 0x06000001
- || U.y[5] != 0x40010000)
- abort();
- return 0;
-}
diff --git a/gcc/testsuite/gcc.apple/bitreverse-25.c b/gcc/testsuite/gcc.apple/bitreverse-25.c
index a41515f9d98..f77ba1ad2ff 100644
--- a/gcc/testsuite/gcc.apple/bitreverse-25.c
+++ b/gcc/testsuite/gcc.apple/bitreverse-25.c
@@ -3,6 +3,7 @@ extern void abort();
/* { dg-do run { target powerpc*-*-darwin* } } */
/* { dg-options "-std=gnu99" } */
#pragma reverse_bitfields on
+#pragma ms_struct on
#pragma pack(push,1)
typedef struct _S2
diff --git a/gcc/testsuite/gcc.apple/bitreverse-26.c b/gcc/testsuite/gcc.apple/bitreverse-26.c
index 30791498329..e65b5da1262 100644
--- a/gcc/testsuite/gcc.apple/bitreverse-26.c
+++ b/gcc/testsuite/gcc.apple/bitreverse-26.c
@@ -3,6 +3,7 @@ extern void abort();
/* { dg-do run { target powerpc*-*-darwin* } } */
/* { dg-options "-std=gnu99" } */
#pragma reverse_bitfields on
+#pragma ms_struct on
#pragma pack(push,1)
typedef struct _S2
diff --git a/gcc/testsuite/gcc.apple/bitreverse-27.c b/gcc/testsuite/gcc.apple/bitreverse-27.c
deleted file mode 100644
index d313bd6cccd..00000000000
--- a/gcc/testsuite/gcc.apple/bitreverse-27.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* APPLE LOCAL file 4436477 */
-extern void abort();
-/* { dg-do run { target powerpc*-*-darwin* } } */
-/* { dg-options "-std=gnu99" } */
-
-#pragma reverse_bitfields on
-
-typedef struct _S5
-{
- unsigned long l1 : 16;
- unsigned long l2 : 16;
- unsigned char c1;
- unsigned short s1 : 8;
- unsigned short s2 : 8;
- unsigned char c2;
-} S5;
-
-union U { S5 ss; unsigned int x[4]; };
-
-int TestS5(void)
-{
- union U u = {0};
-
- u.ss.c1 = 0x56;
- u.ss.c2 = 0x78;
-
- if (sizeof(S5) != 8 ||
- u.ss.s1 != 0x56 || u.ss.s2 != 0x78 ||
- u.x[0] != 0x0000000 || u.x[1] != 0x56000078 || u.x[2] != 0x00000000)
- abort();
- return 0;
-}
-
-int main()
-{
- return TestS5();
-}
diff --git a/gcc/testsuite/gcc.apple/bitreverse-3.c b/gcc/testsuite/gcc.apple/bitreverse-3.c
index 034d120f6ba..9b79f0edfe2 100644
--- a/gcc/testsuite/gcc.apple/bitreverse-3.c
+++ b/gcc/testsuite/gcc.apple/bitreverse-3.c
@@ -48,6 +48,7 @@ typedef struct
} u2;
} Bitfields;
+#pragma ms_struct on
#pragma reverse_bitfields on
int main()
{
diff --git a/gcc/testsuite/gcc.apple/bitreverse-4.c b/gcc/testsuite/gcc.apple/bitreverse-4.c
deleted file mode 100644
index 1ebf5f7eb07..00000000000
--- a/gcc/testsuite/gcc.apple/bitreverse-4.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* APPLE LOCAL file */
-#include <stdio.h>
-#include <string.h>
-
-/* Tests interleaving of bitfields and non-bitfields. Note that they
- overlap, so the code cannot possibly work, but bug compability is
- the requirement. */
-
-/* { dg-do run { target powerpc*-*-darwin* } } */
-
-#pragma reverse_bitfields on
-typedef struct
-{
- union
- {
- unsigned int i1;
- struct
- {
- int b1: 1;
- unsigned int b2: 2;
- unsigned int b3: 4;
- unsigned int b4: 8;
- int b5: 16;
- } bits;
- } u1;
-
- short baz;
- union
- {
- struct
- {
- unsigned int i2;
- unsigned int i3;
- unsigned int i4;
- unsigned int i5;
- } ints;
-
- struct
- {
- unsigned int b1: 16;
- unsigned int b2: 8;
- unsigned int b3: 4;
- char quux;
- unsigned int b4: 2;
- unsigned int b5: 1;
- short baz;
- unsigned int b6: 2;
- unsigned int b7: 4;
- short baz2;
- unsigned int b8: 8;
- unsigned int b9: 16;
- } bits;
- } u2;
-} Bitfields;
-
-
-int main()
-{
- Bitfields bitfields;
-
-
- memset(&bitfields, 0, sizeof(bitfields));
-
- bitfields.u1.bits.b1 = 1; /* { dg-warning "overflow in implicit constant conversion" } */
- bitfields.u1.bits.b2 = 1;
- bitfields.u1.bits.b3 = 1;
- bitfields.u1.bits.b4 = 1;
- bitfields.u1.bits.b5 = 1;
- bitfields.baz = 0x5555;
- bitfields.u2.bits.b1 = 1;
- bitfields.u2.bits.b2 = 1;
- bitfields.u2.bits.b3 = 1;
- bitfields.u2.bits.quux = 0xa55a; /* { dg-warning "overflow in implicit constant conversion" } */
- bitfields.u2.bits.b4 = 1;
- bitfields.u2.bits.b5 = 1;
- bitfields.u2.bits.baz = 0xaaaa; /* { dg-warning "overflow in implicit constant conversion" } */
- bitfields.u2.bits.b6 = 1;
- bitfields.u2.bits.b7 = 1;
- bitfields.u2.bits.baz2 = 0x3333;
- bitfields.u2.bits.b8 = 1;
- bitfields.u2.bits.b9 = 1;
-
- if (bitfields.u1.i1 != 0x0000808b
- || bitfields.baz != 0x5555
- || bitfields.u2.ints.i2 != 0x01010001
- || bitfields.u2.ints.i3 != 0x5a00aaaa
- || bitfields.u2.ints.i4 != 0x00003333
- || bitfields.u2.ints.i5 != 0x00000101
- || sizeof(bitfields) != 24)
- return 42;
- return 0;
-}
diff --git a/gcc/testsuite/gcc.apple/bitreverse-5.c b/gcc/testsuite/gcc.apple/bitreverse-5.c
deleted file mode 100644
index 50c4df3879e..00000000000
--- a/gcc/testsuite/gcc.apple/bitreverse-5.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* APPLE LOCAL file */
-#include <stdio.h>
-#include <string.h>
-
-/* Tests interaction with pragma pack, and interleaving of bitfields
- and non-bitfields. */
-
-/* { dg-do run { target powerpc*-*-darwin* } } */
-
-#pragma reverse_bitfields on
-typedef struct
-{
- union
- {
- unsigned int i1;
- struct
- {
- int b1: 1;
- unsigned int b2: 2;
- unsigned int b3: 4;
- unsigned int b4: 8;
- int b5: 16;
- } bits;
- } u1;
-
- short baz;
- union
- {
- struct
- {
- unsigned int i2;
- unsigned int i3;
- unsigned int i4;
- unsigned int i5;
- } ints;
-
-#pragma pack(1)
- struct
- {
- unsigned int b1: 16;
- unsigned int b2: 8;
- unsigned int b3: 4;
- char quux;
- unsigned int b4: 2;
- unsigned int b5: 1;
- short baz;
- unsigned int b6: 2;
- unsigned int b7: 4;
- short baz2;
- unsigned int b8: 8;
- unsigned int b9: 16;
- } bits;
- } u2;
-} Bitfields;
-
-
-int main()
-{
- Bitfields bitfields;
-
-
- memset(&bitfields, 0, sizeof(bitfields));
-
- bitfields.u1.bits.b1 = 1; /* { dg-warning "overflow in implicit constant conversion" } */
- bitfields.u1.bits.b2 = 1;
- bitfields.u1.bits.b3 = 1;
- bitfields.u1.bits.b4 = 1;
- bitfields.u1.bits.b5 = 1;
- bitfields.baz = 0x5555;
- bitfields.u2.bits.b1 = 1;
- bitfields.u2.bits.b2 = 1;
- bitfields.u2.bits.b3 = 1;
- bitfields.u2.bits.quux = 0xa55a; /* { dg-warning "overflow in implicit constant conversion" } */
- bitfields.u2.bits.b4 = 1;
- bitfields.u2.bits.b5 = 1;
- bitfields.u2.bits.baz = 0xaaaa; /* { dg-warning "overflow in implicit constant conversion" } */
- bitfields.u2.bits.b6 = 1;
- bitfields.u2.bits.b7 = 1;
- bitfields.u2.bits.baz2 = 0x3333;
- bitfields.u2.bits.b8 = 1;
- bitfields.u2.bits.b9 = 1;
-
- if (bitfields.u1.i1 != 0x0000808b
- || bitfields.baz != 0x5555
- || bitfields.u2.ints.i2 != 0x01010001
- || bitfields.u2.ints.i3 != 0x5a00aaaa
- || bitfields.u2.ints.i4 != 0x01333305
- || bitfields.u2.ints.i5 != 0x00000001
- || sizeof(bitfields) != 22)
- return 42;
- return 0;
-}
diff --git a/gcc/testsuite/gcc.apple/bitreverse-6.c b/gcc/testsuite/gcc.apple/bitreverse-6.c
deleted file mode 100644
index d24689f4412..00000000000
--- a/gcc/testsuite/gcc.apple/bitreverse-6.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/* APPLE LOCAL file */
-#include <stdio.h>
-#include <string.h>
-
-/* Tests interaction with pragma pack, and interleaving of bitfields
- and non-bitfields. */
-
-/* { dg-do run { target powerpc*-*-darwin* } } */
-
-#pragma reverse_bitfields on
-typedef struct
-{
- union
- {
- unsigned int i1;
-#pragma pack(2)
- struct
- {
- int b1: 1;
- unsigned int b2: 2;
- unsigned int b3: 4;
- unsigned int b4: 8;
- int b5: 16;
- } bits;
- } u1;
-
- short baz;
- union
- {
- struct
- {
- unsigned int i2;
- unsigned int i3;
- unsigned int i4;
- unsigned int i5;
- } ints;
-
-#pragma pack(1)
- struct
- {
- unsigned int b1: 16;
- unsigned int b2: 8;
- unsigned int b3: 4;
- char quux;
- unsigned int b4: 2;
- unsigned int b5: 1;
- short baz;
- unsigned int b6: 2;
- unsigned int b7: 4;
- short baz2;
- unsigned int b8: 8;
- unsigned int b9: 16;
- } bits;
- } u2;
-} Bitfields;
-
-
-int main()
-{
- Bitfields bitfields;
-
-
- memset(&bitfields, 0, sizeof(bitfields));
-
- bitfields.u1.bits.b1 = 1; /* { dg-warning "overflow in implicit constant conversion" } */
- bitfields.u1.bits.b2 = 1;
- bitfields.u1.bits.b3 = 1;
- bitfields.u1.bits.b4 = 1;
- bitfields.u1.bits.b5 = 1;
- bitfields.baz = 0x5555;
- bitfields.u2.bits.b1 = 1;
- bitfields.u2.bits.b2 = 1;
- bitfields.u2.bits.b3 = 1;
- bitfields.u2.bits.quux = 0xa55a; /* { dg-warning "overflow in implicit constant conversion" } */
- bitfields.u2.bits.b4 = 1;
- bitfields.u2.bits.b5 = 1;
- bitfields.u2.bits.baz = 0xaaaa; /* { dg-warning "overflow in implicit constant conversion" } */
- bitfields.u2.bits.b6 = 1;
- bitfields.u2.bits.b7 = 1;
- bitfields.u2.bits.baz2 = 0x3333;
- bitfields.u2.bits.b8 = 1;
- bitfields.u2.bits.b9 = 1;
-
- if (bitfields.u1.i1 != 0x0000808b
- || bitfields.baz != 0x5555
- || bitfields.u2.ints.i2 != 0x01010001
- || bitfields.u2.ints.i3 != 0x5a00aaaa
- || bitfields.u2.ints.i4 != 0x01333305
- || bitfields.u2.ints.i5 != 0x00000001
- || sizeof(bitfields) != 22)
- return 42;
- return 0;
-}
diff --git a/gcc/testsuite/gcc.apple/bitreverse-7.c b/gcc/testsuite/gcc.apple/bitreverse-7.c
deleted file mode 100644
index f09076bd363..00000000000
--- a/gcc/testsuite/gcc.apple/bitreverse-7.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/* APPLE LOCAL file */
-#include <stdio.h>
-#include <string.h>
-
-/* Tests interaction with pragma pack, and interleaving of bitfields
- and non-bitfields. */
-
-/* { dg-do run { target powerpc*-*-darwin* } } */
-/* { dg-options "-std=gnu99" } */
-
-#pragma reverse_bitfields on
-typedef struct
-{
- union
- {
- unsigned int i1;
-#pragma pack(2)
- struct
- {
- short b1: 1;
- unsigned int b2: 2;
- char b3: 4;
- unsigned int b4: 8;
- unsigned int b5: 16;
- } bits;
- } u1;
-
- short baz;
- union
- {
- struct
- {
- unsigned int i2;
- unsigned int i3;
- unsigned int i4;
- unsigned int i5;
- } ints;
-
-#pragma pack(1)
- struct
- {
- unsigned int b1: 16;
- unsigned int b2: 8;
- unsigned int b3: 4;
- char quux;
- unsigned int b4: 2;
- unsigned int b5: 1;
- short baz;
- unsigned int b6: 2;
- unsigned int b7: 4;
- short baz2;
- unsigned int b8: 8;
- unsigned int b9: 16;
- } bits;
- } u2;
-} Bitfields;
-
-
-int main()
-{
- Bitfields bitfields;
-
-
- memset(&bitfields, 0, sizeof(bitfields));
-
- bitfields.u1.bits.b1 = 1;
- bitfields.u1.bits.b2 = 1;
- bitfields.u1.bits.b3 = 1;
- bitfields.u1.bits.b4 = 1;
- bitfields.u1.bits.b5 = 1;
- bitfields.baz = 0x5555;
- bitfields.u2.bits.b1 = 1;
- bitfields.u2.bits.b2 = 1;
- bitfields.u2.bits.b3 = 1;
- bitfields.u2.bits.quux = 0xa55a; /* { dg-warning "overflow in implicit constant conversion" } */
- bitfields.u2.bits.b4 = 1;
- bitfields.u2.bits.b5 = 1;
- bitfields.u2.bits.baz = 0xaaaa;
- bitfields.u2.bits.b6 = 1;
- bitfields.u2.bits.b7 = 1;
- bitfields.u2.bits.baz2 = 0x3333;
- bitfields.u2.bits.b8 = 1;
- bitfields.u2.bits.b9 = 1;
-
- if (bitfields.u1.i1 != 0x00008082
- || bitfields.baz != 0x5555
- || bitfields.u2.ints.i2 != 0x01010001
- || bitfields.u2.ints.i3 != 0x5a00aaaa
- || bitfields.u2.ints.i4 != 0x01333305
- || bitfields.u2.ints.i5 != 0x00000001
- || sizeof(bitfields) != 22)
- return 42;
- return 0;
-}
diff --git a/gcc/testsuite/gcc.apple/bitreverse-8.c b/gcc/testsuite/gcc.apple/bitreverse-8.c
deleted file mode 100644
index 77f5d6c6e9d..00000000000
--- a/gcc/testsuite/gcc.apple/bitreverse-8.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* APPLE LOCAL file */
-#include <stdio.h>
-#include <string.h>
-
-/* Tests interleaving of bitfields and non-bitfields. */
-
-/* { dg-do run { target powerpc*-*-darwin* } } */
-/* { dg-options "-std=gnu99" } */
-
-#pragma reverse_bitfields on
-typedef struct
-{
- union
- {
- unsigned int i1;
- struct
- {
- short b1: 1;
- unsigned int b2: 2;
- char b3: 4;
- unsigned int b4: 8;
- unsigned int b5: 16;
- } bits;
- } u1;
-
- short baz;
- union
- {
- struct
- {
- unsigned int i2;
- unsigned int i3;
- unsigned int i4;
- unsigned int i5;
- } ints;
-
- struct
- {
- unsigned int b1: 16;
- unsigned int b2: 8;
- unsigned int b3: 4;
- char quux;
- unsigned int b4: 2;
- unsigned int b5: 1;
- short baz;
- unsigned int b6: 2;
- unsigned int b7: 4;
- short baz2;
- unsigned int b8: 8;
- unsigned int b9: 16;
- } bits;
- } u2;
-} Bitfields;
-
-
-int main()
-{
- Bitfields bitfields;
-
-
- memset(&bitfields, 0, sizeof(bitfields));
-
- bitfields.u1.bits.b1 = 1;
- bitfields.u1.bits.b2 = 1;
- bitfields.u1.bits.b3 = 1;
- bitfields.u1.bits.b4 = 1;
- bitfields.u1.bits.b5 = 1;
- bitfields.baz = 0x5555;
- bitfields.u2.bits.b1 = 1;
- bitfields.u2.bits.b2 = 1;
- bitfields.u2.bits.b3 = 1;
- bitfields.u2.bits.quux = 0xa55a; /* { dg-warning "overflow in implicit constant conversion" } */
- bitfields.u2.bits.b4 = 1;
- bitfields.u2.bits.b5 = 1;
- bitfields.u2.bits.baz = 0xaaaa;
- bitfields.u2.bits.b6 = 1;
- bitfields.u2.bits.b7 = 1;
- bitfields.u2.bits.baz2 = 0x3333;
- bitfields.u2.bits.b8 = 1;
- bitfields.u2.bits.b9 = 1;
- if (bitfields.u1.i1 != 0x00008082
- || bitfields.baz != 0x5555
- || bitfields.u2.ints.i2 != 0x01010001
- || bitfields.u2.ints.i3 != 0x5a00aaaa
- || bitfields.u2.ints.i4 != 0x00003333
- || bitfields.u2.ints.i5 != 0x00000101
- || sizeof(bitfields) != 24)
- return 42;
- return 0;
-}
diff --git a/gcc/testsuite/gcc.apple/bitreverse-9.c b/gcc/testsuite/gcc.apple/bitreverse-9.c
index f719335b17e..b9c926627a6 100644
--- a/gcc/testsuite/gcc.apple/bitreverse-9.c
+++ b/gcc/testsuite/gcc.apple/bitreverse-9.c
@@ -53,6 +53,7 @@ typedef struct
} u2;
} Bitfields;
+#pragma ms_struct on
#pragma reverse_bitfields on
int main()
{
diff --git a/gcc/tree.h b/gcc/tree.h
index 70725c3cc90..74d048dc995 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -3159,11 +3159,6 @@ typedef struct record_layout_info_s
/* True if we've seen a packed field that didn't have normal
alignment anyway. */
int packed_maybe_necessary;
- /* APPLE LOCAL begin bitfield reversal */
- int among_reversed_bitfields;
- unsigned int reversed_bitfield_type_size;
- unsigned int reversed_bitfield_bitpos;
- /* APPLE LOCAL end bitfield reversal */
} *record_layout_info;
extern void set_lang_adjust_rli (void (*) (record_layout_info));