Commit af95bb26 by Eric Botcazou Committed by Eric Botcazou

decl.c (gnat_to_gnu_component_type): Apply the check for atomic access once the…

decl.c (gnat_to_gnu_component_type): Apply the check for atomic access once the component size is taken into account...

	* gcc-interface/decl.c (gnat_to_gnu_component_type): Apply the check
	for atomic access once the component size is taken into account and
	also do it if the component type is Atomic or Volatile_Full_Access.

From-SVN: r256465
parent bdd82c9b
2018-01-10 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (gnat_to_gnu_component_type): Apply the check
for atomic access once the component size is taken into account and
also do it if the component type is Atomic or Volatile_Full_Access.
2018-01-04 Eric Botcazou <ebotcazou@adacore.com> 2018-01-04 Eric Botcazou <ebotcazou@adacore.com>
* gnatvsn.ads: Bump copyright year. * gnatvsn.ads: Bump copyright year.
......
...@@ -5022,9 +5022,6 @@ gnat_to_gnu_component_type (Entity_Id gnat_array, bool definition, ...@@ -5022,9 +5022,6 @@ gnat_to_gnu_component_type (Entity_Id gnat_array, bool definition,
&& tree_fits_uhwi_p (TYPE_SIZE (gnu_type))) && tree_fits_uhwi_p (TYPE_SIZE (gnu_type)))
gnu_type = make_packable_type (gnu_type, false, max_align); gnu_type = make_packable_type (gnu_type, false, max_align);
if (Has_Atomic_Components (gnat_array))
check_ok_for_atomic_type (gnu_type, gnat_array, true);
/* Get and validate any specified Component_Size. */ /* Get and validate any specified Component_Size. */
gnu_comp_size gnu_comp_size
= validate_size (Component_Size (gnat_array), gnu_type, gnat_array, = validate_size (Component_Size (gnat_array), gnu_type, gnat_array,
...@@ -5071,6 +5068,9 @@ gnat_to_gnu_component_type (Entity_Id gnat_array, bool definition, ...@@ -5071,6 +5068,9 @@ gnat_to_gnu_component_type (Entity_Id gnat_array, bool definition,
gnat_array); gnat_array);
} }
if (Has_Atomic_Components (gnat_array) || Is_Atomic_Or_VFA (gnat_type))
check_ok_for_atomic_type (gnu_type, gnat_array, true);
/* If the component type is a padded type made for a non-bit-packed array /* If the component type is a padded type made for a non-bit-packed array
of scalars with reverse storage order, we need to propagate the reverse of scalars with reverse storage order, we need to propagate the reverse
storage order to the padding type since it is the innermost enclosing storage order to the padding type since it is the innermost enclosing
......
2018-01-10 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/atomic10.adb: New test.
2018-01-10 Steven G. Kargl <kargl@gcc.gnu.org> 2018-01-10 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/82367 PR fortran/82367
......
-- { dg-do compile }
-- { dg-options "-gnatws" }
with System.Multiprocessors;
procedure Atomic10 is
type Atomic_Unsigned is mod 2 ** 32;
pragma Atomic (Atomic_Unsigned);
Max : Positive := Positive (System.Multiprocessors.Number_Of_CPUs);
Comp_Size : constant := 64 * 8;
subtype Index_Type is Positive range 1 .. Max;
type Array_Type is array (Index_Type) of aliased Atomic_Unsigned; -- { dg-error "cannot be guaranteed" }
for Array_Type'Component_Size use Comp_Size;
Slots : Array_Type;
begin
for Index in Index_Type loop
Slots (Index) := 0;
end loop;
end;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment