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>
* gnatvsn.ads: Bump copyright year.
......
......@@ -5022,9 +5022,6 @@ gnat_to_gnu_component_type (Entity_Id gnat_array, bool definition,
&& tree_fits_uhwi_p (TYPE_SIZE (gnu_type)))
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. */
gnu_comp_size
= 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,
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
of scalars with reverse storage order, we need to propagate the reverse
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>
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