]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Reject component-related aspects on formal non-array types
authorPiotr Trojanek <trojanek@adacore.com>
Mon, 17 Mar 2025 12:20:53 +0000 (13:20 +0100)
committerEric Botcazou <ebotcazou@adacore.com>
Mon, 9 Jun 2025 08:23:59 +0000 (10:23 +0200)
In Ada 2022 aspects Atomic_Components and Volatile_Components can be specified
for a formal array type, but they were wrongly accepted on any formal type.

Also, we don't need to check if the corresponding pragmas appear in Ada 2022
mode, because generic formal parameters can't have explicit representation
pragmas in any Ada version and can only have aspects since Ada 2022.

gcc/ada/ChangeLog:

* sem_prag.adb (Analyze_Pragma): Fix conditions for legality checks on
formal type declarations.

gcc/ada/sem_prag.adb

index 17805c96fed34a1f8719a271425117acf245bf4b..19e72ab6f38f0784b112c6c9583a4ae3a6e8863c 100644 (file)
@@ -14696,21 +14696,18 @@ package body Sem_Prag is
 
             D := Declaration_Node (E);
 
-            if (Nkind (D) = N_Full_Type_Declaration and then Is_Array_Type (E))
+            if (Nkind (D) in N_Full_Type_Declaration
+                           | N_Formal_Type_Declaration
+                  and then Is_Array_Type (E))
               or else
                 (Nkind (D) = N_Object_Declaration
                    and then Ekind (E) in E_Constant | E_Variable
                    and then Nkind (Object_Definition (D)) =
                                        N_Constrained_Array_Definition)
-              or else
-                 (Ada_Version >= Ada_2022
-                   and then Nkind (D) = N_Formal_Type_Declaration)
             then
                --  The flag is set on the base type, or on the object
 
-               if Nkind (D) in N_Full_Type_Declaration
-                             | N_Formal_Type_Declaration
-               then
+               if Is_Array_Type (E) then
                   E := Base_Type (E);
                end if;