Comments
Patch
===================================================================
@@ -6749,6 +6749,11 @@
then
return True;
+ elsif Nkind (N) = N_Selected_Component
+ and then Is_Atomic (Entity (Selector_Name (N)))
+ then
+ return True;
+
elsif Nkind (N) = N_Indexed_Component
or else Nkind (N) = N_Selected_Component
then
@@ -6772,6 +6777,11 @@
then
return True;
+ elsif Nkind (N) = N_Selected_Component
+ and then Is_Atomic (Entity (Selector_Name (N)))
+ then
+ return True;
+
elsif Nkind (N) = N_Indexed_Component
or else Nkind (N) = N_Selected_Component
then
This changes the error message printed for an invalid access to an atomic component, which was: access to volatile object cannot yield access-to-non-volatile type into the more correct: access to atomic object cannot yield access-to-non-atomic type The problem was that Is_Atomic_Object returned false for such a component. The following testcase should generate the new error message: procedure Atomic_Test is type X32 is mod 2 ** 32; type Rec is record B : aliased X32; pragma Atomic (B); end record; procedure Test (X : access X32) is null; Object : Rec; begin Test (Object.B'Access); end Atomic_Test; Tested on x86_64-pc-linux-gnu, committed on trunk 2012-06-12 Eric Botcazou <ebotcazou@adacore.com> * sem_util.adb (Is_Atomic_Object): Return true for an atomic component as well as a prefix which is an atomic component.