aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sprint.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/sprint.adb')
-rw-r--r--gcc/ada/sprint.adb31
1 files changed, 29 insertions, 2 deletions
diff --git a/gcc/ada/sprint.adb b/gcc/ada/sprint.adb
index 8526716..82d6ce5 100644
--- a/gcc/ada/sprint.adb
+++ b/gcc/ada/sprint.adb
@@ -2479,6 +2479,18 @@ package body Sprint is
Sprint_Node_Sloc (Specification (Node));
Write_Char (';');
+ -- If this is an instantiation, get the aspects from the original
+ -- instantiation node.
+
+ if Is_Generic_Instance (Defining_Entity (Node))
+ and then Has_Aspects (
+ Package_Instantiation (Defining_Entity (Node)))
+ then
+ Sprint_Aspect_Specifications
+ (Package_Instantiation (Defining_Entity (Node)),
+ Semicolon => True);
+ end if;
+
when N_Package_Instantiation =>
Extra_Blank_Line;
Write_Indent_Str_Sloc ("package ");
@@ -2499,12 +2511,27 @@ package body Sprint is
Write_Str_With_Col_Check_Sloc ("package ");
Sprint_Node (Defining_Unit_Name (Node));
- if Nkind_In (Parent (Node), N_Package_Declaration,
- N_Generic_Package_Declaration)
+ if Nkind (Parent (Node)) = N_Generic_Package_Declaration
and then Has_Aspects (Parent (Node))
then
Sprint_Aspect_Specifications
(Parent (Node), Semicolon => False);
+
+ -- An instantiation is rewritten as a package declaration, but
+ -- the aspects belong to the instantiation node.
+
+ elsif Nkind (Parent (Node)) = N_Package_Declaration then
+ declare
+ Pack : constant Entity_Id := Defining_Entity (Node);
+
+ begin
+ if not Is_Generic_Instance (Pack) then
+ if Has_Aspects (Parent (Node)) then
+ Sprint_Aspect_Specifications
+ (Parent (Node), Semicolon => False);
+ end if;
+ end if;
+ end;
end if;
Write_Str (" is");