Minor adjustment in assignment case
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 23 Jun 2020 15:17:50 +0000 (17:17 +0200)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 23 Jun 2020 15:20:27 +0000 (17:20 +0200)
gcc/ada/ChangeLog:
* gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Do
not test Is_Bit_Packed_Array in the memset path.

gcc/ada/gcc-interface/trans.c

index 313a2fbcbafe5bd9d0f6e4c7cfb66efbb4cc1167..a64b6d00d00e910bb7ea64eb7c7a14333472db7e 100644 (file)
@@ -7282,10 +7282,8 @@ gnat_to_gnu (Node_Id gnat_node)
              : gnat_expr;
          const Entity_Id gnat_type
            = Underlying_Type (Etype (Name (gnat_node)));
-         const bool regular_array_type_p
-           = Is_Array_Type (gnat_type) && !Is_Bit_Packed_Array (gnat_type);
          const bool use_memset_p
-           = regular_array_type_p
+           = Is_Array_Type (gnat_type)
              && Nkind (gnat_inner) == N_Aggregate
              && Is_Single_Aggregate (gnat_inner);
 
@@ -7356,7 +7354,8 @@ gnat_to_gnu (Node_Id gnat_node)
             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
-             && regular_array_type_p
+             && Is_Array_Type (gnat_type)
+             && !Is_Bit_Packed_Array (gnat_type)
              && !(Forwards_OK (gnat_node) && Backwards_OK (gnat_node)))
            {
              tree to = TREE_OPERAND (gnu_result, 0);