This is a regression present on the mainline: the compiler fails to assign an 
aggregate to a full-access component (i.e. Atomic or VFA) as a whole if the 
type of the component is not full access itself.

Tested on x86-64/Linux, applied on the mainline.


2021-03-29  Eric Botcazou  <ebotca...@adacore.com>

        PR ada/99802
        * freeze.adb (Is_Full_Access_Aggregate): Call Is_Full_Access_Object
        on the name of an N_Assignment_Statement to spot full access.

-- 
Eric Botcazou
diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb
index 8dc8a222396..da14af9b8bd 100644
--- a/gcc/ada/freeze.adb
+++ b/gcc/ada/freeze.adb
@@ -1754,8 +1754,7 @@ package body Freeze is
             Typ := Etype (Name (Par));
 
             if not Is_Full_Access (Typ)
-              and then not (Is_Entity_Name (Name (Par))
-                             and then Is_Full_Access (Entity (Name (Par))))
+              and then not Is_Full_Access_Object (Name (Par))
             then
                return False;
             end if;

Reply via email to