From: Piotr Trojanek <troja...@adacore.com>

In Ada 2022 aspects Atomic_Components and Volatile_Components can be specified
for a formal array type, but then they need to be set on the base type entity.
Otherwise we get an assertion failure in debug build and wrong legality errors
in production builds.

gcc/ada/ChangeLog:

        * sem_prag.adb (Analyze_Pragma): If pragmas apply to a formal array
        type, then set the flags on the base type.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/sem_prag.adb | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index 4090d0c7117..01983f9d89f 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -14689,7 +14689,9 @@ package body Sem_Prag is
             then
                --  The flag is set on the base type, or on the object
 
-               if Nkind (D) = N_Full_Type_Declaration then
+               if Nkind (D) in N_Full_Type_Declaration
+                             | N_Formal_Type_Declaration
+               then
                   E := Base_Type (E);
                end if;
 
-- 
2.43.0

Reply via email to