trans.c (gnat_to_gnu): Do not use memmove if the array type is bit-packed.
* gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Do not use memmove if the array type is bit-packed. From-SVN: r158701
This commit is contained in:
parent
3d416346cf
commit
82d6f53279
@ -1,3 +1,8 @@
|
||||
2010-04-25 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Do not
|
||||
use memmove if the array type is bit-packed.
|
||||
|
||||
2010-04-18 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc-interface/misc.c (gnat_init): Remove second argument in call to
|
||||
|
@ -4797,10 +4797,12 @@ gnat_to_gnu (Node_Id gnat_node)
|
||||
gnu_result
|
||||
= build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_lhs, gnu_rhs);
|
||||
|
||||
/* If the type being assigned is an array type and the two sides
|
||||
are not completely disjoint, play safe and use memmove. */
|
||||
/* If the type being assigned is an array type and the two sides are
|
||||
not completely disjoint, play safe and use memmove. But don't do
|
||||
it for a bit-packed array as it might not be byte-aligned. */
|
||||
if (TREE_CODE (gnu_result) == MODIFY_EXPR
|
||||
&& Is_Array_Type (Etype (Name (gnat_node)))
|
||||
&& !Is_Bit_Packed_Array (Etype (Name (gnat_node)))
|
||||
&& !(Forwards_OK (gnat_node) && Backwards_OK (gnat_node)))
|
||||
{
|
||||
tree to, from, size, to_ptr, from_ptr, t;
|
||||
|
@ -1,3 +1,7 @@
|
||||
2010-04-25 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/pack15.ad[sb]: New test.
|
||||
|
||||
2010-04-25 Paolo Bonzini <bonzini@gnu.org>
|
||||
|
||||
* gcc.target/arm/mla-1.c: New test.
|
||||
|
10
gcc/testsuite/gnat.dg/pack15.adb
Normal file
10
gcc/testsuite/gnat.dg/pack15.adb
Normal file
@ -0,0 +1,10 @@
|
||||
-- { dg-do compile }
|
||||
|
||||
package body Pack15 is
|
||||
|
||||
procedure Transfer is
|
||||
begin
|
||||
O.Status_Flags := Status_Flags;
|
||||
end;
|
||||
|
||||
end Pack15;
|
22
gcc/testsuite/gnat.dg/pack15.ads
Normal file
22
gcc/testsuite/gnat.dg/pack15.ads
Normal file
@ -0,0 +1,22 @@
|
||||
package Pack15 is
|
||||
|
||||
type Flags is array (1..2) of Boolean;
|
||||
for Flags'Component_Size use 1;
|
||||
|
||||
type Messages is record
|
||||
Status_Flags : Flags;
|
||||
end record;
|
||||
|
||||
for Messages use record
|
||||
Status_Flags at 0 range 1 .. 2;
|
||||
end record;
|
||||
|
||||
O : Messages;
|
||||
|
||||
Buffer : Integer;
|
||||
Status_Flags : Flags;
|
||||
for Status_Flags'Address use Buffer'Address;
|
||||
|
||||
procedure Transfer;
|
||||
|
||||
end Pack15;
|
Loading…
Reference in New Issue
Block a user