decl.c (gnat_to_gnu_field): Always check components declared as atomic.

* gcc-interface/decl.c (gnat_to_gnu_field): Always check components
	declared as atomic.  Move around conditionally executed code.

From-SVN: r180539
This commit is contained in:
Eric Botcazou 2011-10-26 20:32:17 +00:00 committed by Eric Botcazou
parent 24847495f3
commit 0025cb6381
4 changed files with 35 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2011-10-26 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (gnat_to_gnu_field): Always check components
declared as atomic. Move around conditionally executed code.
2011-10-24 Robert Dewar <dewar@adacore.com>
* sem.adb (Initialize): Fix bug that blew up if called a second

View File

@ -6853,10 +6853,8 @@ gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed,
}
}
/* If we are packing the record and the field is BLKmode, round the
size up to a byte boundary. */
if (packed && TYPE_MODE (gnu_field_type) == BLKmode && gnu_size)
gnu_size = round_up (gnu_size, BITS_PER_UNIT);
if (Is_Atomic (gnat_field))
check_ok_for_atomic (gnu_field_type, gnat_field, false);
if (Present (Component_Clause (gnat_field)))
{
@ -6946,9 +6944,6 @@ gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed,
gnu_pos = NULL_TREE;
}
}
if (Is_Atomic (gnat_field))
check_ok_for_atomic (gnu_field_type, gnat_field, false);
}
/* If the record has rep clauses and this is the tag field, make a rep
@ -6961,8 +6956,15 @@ gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed,
}
else
{
gnu_pos = NULL_TREE;
/* If we are packing the record and the field is BLKmode, round the
size up to a byte boundary. */
if (packed && TYPE_MODE (gnu_field_type) == BLKmode && gnu_size)
gnu_size = round_up (gnu_size, BITS_PER_UNIT);
}
/* We need to make the size the maximum for the type if it is
self-referential and an unconstrained type. In that case, we can't
pack the field since we can't make a copy to align it. */

View File

@ -1,3 +1,7 @@
2011-10-26 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/specs/atomic1.ads: New test.
2011-10-26 Ed Smith-Rowland <3dw4rd@verizon.net>
Implement C++11 user-defined literals.

View File

@ -0,0 +1,16 @@
-- { dg-do compile }
package Atomic1 is
type Arr is array (Integer range <>) of Boolean;
type UA is access all Arr;
U : UA;
pragma Atomic (U); -- { dg-error "atomic access" }
type R is record
U : UA;
pragma Atomic (U); -- { dg-error "atomic access" }
end record;
end Atomic1;