decl.c (gnat_to_gnu_entity): Move down code applying atomic checks to the object.
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 27 May 2015 17:57:01 +0000 (17:57 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 27 May 2015 17:57:01 +0000 (17:57 +0000)
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Move down
code applying atomic checks to the object.

From-SVN: r223767

gcc/ada/ChangeLog
gcc/ada/gcc-interface/decl.c

index d9fbe97e507f241dfe90d9b4b253c1d3afc6f1ff..98d5ea9586980d668d0757b30e5b3e038e0fdce5 100644 (file)
@@ -1,3 +1,8 @@
+2015-05-27  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Move down
+       code applying atomic checks to the object.
+
 2015-05-27  Robert Dewar  <dewar@adacore.com>
 
        * sem_aux.adb: Minor rewording.
index 4a8c4d0c35eca685a66c6fa3e44f6aa2cf1b238c..da352c2d9398363a287c953a6bd9fb6494829e16 100644 (file)
@@ -881,15 +881,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
            check_ok_for_atomic_type (gnu_inner, gnat_entity, true);
          }
 
-       /* Now check if the type of the object allows atomic access.  Note
-          that we must test the type, even if this object has size and
-          alignment to allow such access, because we will be going inside
-          the padded record to assign to the object.  We could fix this by
-          always copying via an intermediate value, but it's not clear it's
-          worth the effort.  */
-       if (Is_Atomic_Or_VFA (gnat_entity))
-         check_ok_for_atomic_type (gnu_type, gnat_entity, false);
-
        /* If this is an aliased object with an unconstrained nominal subtype,
           make a type that includes the template.  */
        if (Is_Constr_Subt_For_UN_Aliased (Etype (gnat_entity))
@@ -955,6 +946,10 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
                                debug_info_p, gnat_entity);
          }
 
+       /* Now check if the type of the object allows atomic access.  */
+       if (Is_Atomic_Or_VFA (gnat_entity))
+         check_ok_for_atomic_type (gnu_type, gnat_entity, false);
+
        /* If this is a renaming, avoid as much as possible to create a new
           object.  However, in some cases, creating it is required because
           renaming can be applied to objects that are not names in Ada.