https://gcc.gnu.org/g:b3d991e3d073c66a97384d2ce987d2bb8095ce19

commit r16-3701-gb3d991e3d073c66a97384d2ce987d2bb8095ce19
Author: Viljar Indus <in...@adacore.com>
Date:   Tue Aug 5 12:04:18 2025 +0300

    ada: Create a pragma to emit a misplaced Storage_Size aspect error
    
    We do not emit an error on misplaced Strorage_Size error when
    the aspect is not applied to a task (or an access type). We
    instead create an attribute definition which is ignored most of the
    time. Create a temporary pragma for the aspect specification to
    emit the same misplaced aspect error as we do for pragmas.
    
    gcc/ada/ChangeLog:
    
            * sem_ch13.adb (Analyze_Aspect_Definitions): Create a temporary
            pragma for the non-task and access type cases.

Diff:
---
 gcc/ada/sem_ch13.adb | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index 727c92f5c7e5..370df803c25c 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -5593,14 +5593,28 @@ package body Sem_Ch13 is
                         goto Continue;
                      end;
 
-                  --  All other cases, generate attribute definition
+                  --  Generate an attribute definition for access types
 
-                  else
+                  elsif Is_Access_Type (E) then
                      Aitem :=
                        Make_Attribute_Definition_Clause (Loc,
                          Name       => Ent,
                          Chars      => Name_Storage_Size,
                          Expression => Relocate_Node (Expr));
+
+                  --  This is likely a misplaced aspect. Create a pragma to
+                  --  emit the actual error.
+
+                  else
+                     Aitem :=
+                       Make_Aitem_Pragma
+                         (Pragma_Argument_Associations =>
+                            New_List
+                              (Make_Pragma_Argument_Association
+                                 (Loc, Expression => Relocate_Node (Expr))),
+                          Pragma_Name                  => Name_Storage_Size);
+                     Insert_Pragma (Aitem);
+                     goto Continue;
                   end if;
 
                when Aspect_External_Initialization =>

Reply via email to