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:
parent
4daf64719c
commit
cb88a3eae3
@ -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.
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
15
gcc/testsuite/gnat.dg/max_align.adb
Normal file
15
gcc/testsuite/gnat.dg/max_align.adb
Normal 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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user