Commit cb88a3ea by Olivier Hainque Committed by Olivier Hainque

decl.c (make_aligning_type): Set the mode of the RECORD_TYPE we craft and expand comment.

2007-11-07  Olivier Hainque  <hainque@adacore.com>

        * decl.c (make_aligning_type): Set the mode of the RECORD_TYPE we
        craft and expand comment.

        testsuite/
        * gnat.dg/max_align.adb: New test.

From-SVN: r129958
parent 4daf6471
2007-11-07 Olivier Hainque <hainque@adacore.com>
* decl.c (make_aligning_type): Set the mode of the RECORD_TYPE we
craft and expand comment.
2007-11-01 Eric Botcazou <ebotcazou@adacore.com> 2007-11-01 Eric Botcazou <ebotcazou@adacore.com>
* lang-specs.h: Move translation of -fRTS= after -gnatez switch. * lang-specs.h: Move translation of -fRTS= after -gnatez switch.
...@@ -5144,10 +5144,13 @@ make_aligning_type (tree type, unsigned int align, tree size, ...@@ -5144,10 +5144,13 @@ make_aligning_type (tree type, unsigned int align, tree size,
size_binop (PLUS_EXPR, room_st, voffset_st)), size_binop (PLUS_EXPR, room_st, voffset_st)),
bitsize_unit_node); bitsize_unit_node);
/* Craft the GCC record representation. The sizes are set manually to /* Craft the GCC record representation. We exceptionally do everything
account for the maximum possible value of voffset, which avoids complex manually here because 1) our generic circuitry is not quite ready to
self-references in the size expression and corresponds to what should be handle the complex position/size expressions we are setting up, 2) we
"alloc"ated for this type anyway. have a strong simplifying factor at hand: we know the maximum possible
value of voffset, and 3) we have to set/reset at least the sizes in
accordance with this maximum value anyway, as we need them to convey
what should be "alloc"ated for this type.
Use -1 as the 'addressable' indication for the field to prevent the Use -1 as the 'addressable' indication for the field to prevent the
creation of a bitfield. We don't need one, it would have damaging creation of a bitfield. We don't need one, it would have damaging
...@@ -5171,6 +5174,8 @@ make_aligning_type (tree type, unsigned int align, tree size, ...@@ -5171,6 +5174,8 @@ make_aligning_type (tree type, unsigned int align, tree size,
= size_binop (PLUS_EXPR, size, = size_binop (PLUS_EXPR, size,
size_int (room + align / BITS_PER_UNIT)); size_int (room + align / BITS_PER_UNIT));
TYPE_MODE (record_type) = BLKmode;
copy_alias_set (record_type, type); copy_alias_set (record_type, type);
return record_type; return record_type;
} }
......
2007-11-07 Olivier Hainque <hainque@adacore.com>
* gnat.dg/max_align.adb: New test.
2007-11-06 H.J. Lu <hongjiu.lu@intel.com> 2007-11-06 H.J. Lu <hongjiu.lu@intel.com>
PR target/30961 PR target/30961
-- { dg-do compile }
procedure Max_Align is
type Block is record
X : Integer;
end record;
for Block'Alignment use Standard'Maximum_Alignment;
type Block_Access is access Block;
Ptr : Block_Access := new Block;
begin
null;
end;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment