aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2023-03-25 21:42:11 +0100
committerMarc Poulhiès <poulhies@adacore.com>2023-05-26 09:29:18 +0200
commit6b19eb2490675cacf72b8225d953d73029bc53fb (patch)
treeb4dbc241becc4bc7a549e43353ca88c1b0a46243
parentd97ab77cc828c48a6d0dca6f955e91a77f40dbf9 (diff)
downloadgcc-6b19eb2490675cacf72b8225d953d73029bc53fb.zip
gcc-6b19eb2490675cacf72b8225d953d73029bc53fb.tar.gz
gcc-6b19eb2490675cacf72b8225d953d73029bc53fb.tar.bz2
ada: Fix internal error on Big_Integer conversion ghost instance
The problem is that the ghost mode of the instance is used to analyze the parent of the generic body, whose own ghost mode has nothing to do with it. gcc/ada/ * sem_ch12.adb (Instantiate_Package_Body): Set the ghost mode to that of the instance only after loading the generic's parent. (Instantiate_Subprogram_Body): Likewise.
-rw-r--r--gcc/ada/sem_ch12.adb24
1 files changed, 12 insertions, 12 deletions
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index 4fefcc8..a9a3e32 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -11911,12 +11911,6 @@ package body Sem_Ch12 is
return;
end if;
- -- The package being instantiated may be subject to pragma Ghost. Set
- -- the mode now to ensure that any nodes generated during instantiation
- -- are properly marked as Ghost.
-
- Set_Ghost_Mode (Act_Decl_Id);
-
Expander_Mode_Save_And_Set (Body_Info.Expander_Status);
-- Re-establish the state of information on which checks are suppressed.
@@ -12029,6 +12023,12 @@ package body Sem_Ch12 is
Instantiation_Node := Inst_Node;
end if;
+ -- The package being instantiated may be subject to pragma Ghost. Set
+ -- the mode now to ensure that any nodes generated during instantiation
+ -- are properly marked as Ghost.
+
+ Set_Ghost_Mode (Act_Decl_Id);
+
if Present (Gen_Body_Id) then
Save_Env (Gen_Unit, Act_Decl_Id);
Style_Check := False;
@@ -12468,12 +12468,6 @@ package body Sem_Ch12 is
return;
end if;
- -- The subprogram being instantiated may be subject to pragma Ghost. Set
- -- the mode now to ensure that any nodes generated during instantiation
- -- are properly marked as Ghost.
-
- Set_Ghost_Mode (Act_Decl_Id);
-
Expander_Mode_Save_And_Set (Body_Info.Expander_Status);
-- Re-establish the state of information on which checks are suppressed.
@@ -12511,6 +12505,12 @@ package body Sem_Ch12 is
Instantiation_Node := Inst_Node;
+ -- The subprogram being instantiated may be subject to pragma Ghost. Set
+ -- the mode now to ensure that any nodes generated during instantiation
+ -- are properly marked as Ghost.
+
+ Set_Ghost_Mode (Act_Decl_Id);
+
if Present (Gen_Body_Id) then
Gen_Body := Unit_Declaration_Node (Gen_Body_Id);