https://gcc.gnu.org/g:d8d191469e1e08e7b8530874cbb0f2781dc2e14d

commit r15-3404-gd8d191469e1e08e7b8530874cbb0f2781dc2e14d
Author: Eric Botcazou <ebotca...@adacore.com>
Date:   Tue Aug 20 22:59:58 2024 +0200

    ada: Pass unaligned record components by copy in calls on all platforms
    
    This has historically been done only on platforms requiring the strict
    alignment of memory references, but this can arguably be considered as
    being mandated by the language on all of them.
    
    gcc/ada/
    
            * gcc-interface/trans.cc (addressable_p) <COMPONENT_REF>: Take into
            account the alignment of the field on all platforms.

Diff:
---
 gcc/ada/gcc-interface/trans.cc | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc
index 3f2eadd7b2bc..7cced04361d0 100644
--- a/gcc/ada/gcc-interface/trans.cc
+++ b/gcc/ada/gcc-interface/trans.cc
@@ -10289,9 +10289,8 @@ addressable_p (tree gnu_expr, tree gnu_type)
                   check the alignment of the containing record, as it is
                   guaranteed to be not smaller than that of its most
                   aligned field that is not a bit-field.  */
-               && (!STRICT_ALIGNMENT
-                   || DECL_ALIGN (TREE_OPERAND (gnu_expr, 1))
-                      >= TYPE_ALIGN (TREE_TYPE (gnu_expr))))
+               && DECL_ALIGN (TREE_OPERAND (gnu_expr, 1))
+                  >= TYPE_ALIGN (TREE_TYPE (gnu_expr)))
               /* The field of a padding record is always addressable.  */
               || TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_expr, 0))))
              && addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE));

Reply via email to