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
This commit is contained in:
Olivier Hainque 2007-11-07 09:51:46 +00:00 committed by Olivier Hainque
parent 4daf64719c
commit cb88a3eae3
4 changed files with 33 additions and 4 deletions

View File

@ -1,3 +1,8 @@
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.

View File

@ -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,
= 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;
} }

View File

@ -1,3 +1,7 @@
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

View File

@ -0,0 +1,15 @@
-- { 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;