summaryrefslogtreecommitdiff
path: root/gcc/ada/sem.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2015-10-16 10:54:13 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2015-10-16 10:54:13 +0000
commit30f8d103263824fb491d557cc6554c6e41c4c8bf (patch)
tree092351961339d6743fc1f4b6f5b750838d3bb3e7 /gcc/ada/sem.adb
parent98f7a21629a19ed12703a39d682848821fcd2a60 (diff)
downloadgcc-30f8d103263824fb491d557cc6554c6e41c4c8bf.tar.gz
2015-10-16 Hristian Kirtchev <kirtchev@adacore.com>
* exp_ch3.adb (Expand_N_Full_Type_Declaration): Do not capture, set and restore the Ghost mode. (Expand_N_Object_Declaration): Do not capture, set and restore the Ghost mode. (Freeze_Type): Redo the capture and restore of the Ghost mode. (Restore_Globals): Removed. * exp_ch5.adb (Expand_N_Assignment_Statement): Redo the capture and restore of the Ghost mode. (Restore_Globals): Removed. * exp_ch6.adb (Expand_N_Procedure_Call_Statement): Redo the capture and restore of the Ghost mode. (Expand_N_Subprogram_Body): Redo the capture, set and restore of the Ghost mode. (Expand_N_Subprogram_Declaration): Do not capture, set and restore the Ghost mode. (Restore_Globals): Removed. * exp_ch7.adb (Expand_N_Package_Body): Redo the capture, set and restore of the Ghost mode. (Expand_N_Package_Declaration): Do not capture, set and restore the Ghost mode. * exp_ch8.adb (Expand_N_Exception_Renaming_Declaration): Redo the capture and restore of the Ghost mode. (Expand_N_Object_Renaming_Declaration): Redo the capture and restore of the Ghost mode. (Expand_N_Package_Renaming_Declaration): Redo the capture and restore of the Ghost mode. (Expand_N_Subprogram_Renaming_Declaration): Redo the capture and restore of the Ghost mode. * exp_ch11.adb Remove with and use clauses for Ghost. (Expand_N_Exception_Declaration): Do not capture, set and restore the Ghost mode. * exp_disp.adb (Make_DT): Redo the capture and restore of the Ghost mode. (Restore_Globals): Removed. * exp_prag.adb (Expand_Pragma_Check): Do not capture, set and restore the Ghost mode. (Expand_Pragma_Contract_Cases): Redo the capture and restore of the Ghost mode. Preserve the original context of contract cases by setting / resetting the In_Assertion_Expr counter. (Expand_Pragma_Initial_Condition): Redo the capture and restore of the Ghost mode. (Expand_Pragma_Loop_Variant): Redo the capture and restore of the Ghost mode. (Restore_Globals): Removed. * exp_util.adb (Make_Predicate_Call): Redo the capture and restore of the Ghost mode. (Restore_Globals): Removed. * freeze.adb (Freeze_Entity): Redo the capture and restore of the Ghost mode. (Restore_Globals): Removed. * ghost.adb (Check_Ghost_Context): Remove the RM reference from the error message. (Is_OK_Statement): Account for statements that appear in assertion expressions. (Is_Subject_To_Ghost): Moved from spec. * ghost.ads (Is_Subject_To_Ghost): Moved to body. * rtsfind.ads (Load_RTU): Redo the capture and restore of the Ghost mode. * sem.adb Add with and use clauses for Ghost. (Analyze): Redo the capture and restore of the Ghost mode. Set the Ghost mode when analyzing a declaration. (Do_Analyze): Redo the capture and restore of the Ghost mode. * sem_ch3.adb (Analyze_Full_Type_Declaration): Do not capture, set and restore the Ghost mode. (Analyze_Incomplete_Type_Decl): Do not capture, set and restore the Ghost mode. (Analyze_Number_Declaration): Do not capture, set and restore the Ghost mode. (Analyze_Object_Declaration): Do not capture, set and restore the Ghost mode. (Analyze_Private_Extension_Declaration): Do not capture, set and restore the Ghost mode. (Analyze_Subtype_Declaration): Do not capture, set and restore the Ghost mode. (Restore_Globals): Removed. * sem_ch5.adb (Analyze_Assignment): Redo the capture and restore of the Ghost mode. (Restore_Globals): Removed. * sem_ch6.adb (Analyze_Abstract_Subprogram_Declaration): Do not capture, set and restore the Ghost mode. (Analyze_Procedure_Call): Redo the capture and restore of the Ghost mode. (Analyze_Subprogram_Body_Helper): Redo the capture and restore of the Ghost mode. (Analyze_Subprogram_Declaration): Do not capture, set and restore the Ghost mode. (Restore_Globals): Removed. * sem_ch7.adb (Analyze_Package_Body_Helper): Redo the capture and restore of the Ghost mode. (Analyze_Package_Declaration): Do not capture, set and restore the Ghost mode. (Analyze_Private_Type_Declaration): Do not capture, set and restore the Ghost mode. (Restore_Globals): Removed. * sem_ch8.adb (Analyze_Exception_Renaming): Do not capture, set and restore the Ghost mode. (Analyze_Generic_Renaming): Do not capture, set and restore the Ghost mode. (Analyze_Object_Renaming): Do not capture, set and restore the Ghost mode. (Analyze_Package_Renaming): Do not capture, set and restore the Ghost mode. (Analyze_Subprogram_Renaming): Do not capture, set and restore the Ghost mode. (Restore_Globals): Removed. * sem_ch11.adb (Analyze_Exception_Declaration): Do not capture, set and restore the Ghost mode. * sem_ch12.adb (Analyze_Generic_Package_Declaration): Do not capture, set and restore the Ghost mode. (Analyze_Generic_Subprogram_Declaration): Do not capture, set and restore the Ghost mode. * sem_ch13.adb (Build_Invariant_Procedure_Declaration): Redo the capture and restore of the Ghost mode. * sem_prag.adb (Analyze_Contract_Cases_In_Decl_Part): Redo the capture and restore of the Ghost mode. (Analyze_External_Property_In_Decl_Part): Redo the capture and restore of the Ghost mode. (Analyze_Initial_Condition_In_Decl_Part): Redo the capture and restore of the Ghost mode. (Analyze_Pragma): Do not capture, set and restore the Ghost mode for Assert. Redo the capture and restore of the Ghost mode for Check. Do not capture and restore the Ghost mode for Invariant. (Analyze_Pre_Post_Condition_In_Decl_Part): Redo the capture and restore of the Ghost mode. * sem_res.adb (Resolve): Capture, set and restore the Ghost mode when resolving a declaration. * sem_util.adb (Build_Default_Init_Cond_Procedure_Body): Redo the capture and restore of the Ghost mode. (Build_Default_Init_Cond_Procedure_Declaration): Redo the capture and restore of the Ghost mode. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@228871 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/sem.adb')
-rw-r--r--gcc/ada/sem.adb24
1 files changed, 13 insertions, 11 deletions
diff --git a/gcc/ada/sem.adb b/gcc/ada/sem.adb
index 0f8f173a5ff..a6f1be13b3b 100644
--- a/gcc/ada/sem.adb
+++ b/gcc/ada/sem.adb
@@ -29,6 +29,7 @@ with Debug_A; use Debug_A;
with Elists; use Elists;
with Expander; use Expander;
with Fname; use Fname;
+with Ghost; use Ghost;
with Lib; use Lib;
with Lib.Load; use Lib.Load;
with Nlists; use Nlists;
@@ -95,9 +96,7 @@ package body Sem is
-------------
procedure Analyze (N : Node_Id) is
- GM : constant Ghost_Mode_Type := Ghost_Mode;
- -- Save the current Ghost mode in effect in case the construct sets a
- -- different mode.
+ Save_Ghost_Mode : constant Ghost_Mode_Type := Ghost_Mode;
begin
Debug_A_Entry ("analyzing ", N);
@@ -109,6 +108,14 @@ package body Sem is
return;
end if;
+ -- A declaration may be subject to pragma Ghost. Set the mode now to
+ -- ensure that any nodes generated during analysis and expansion are
+ -- marked as Ghost.
+
+ if Is_Declaration (N) then
+ Set_Ghost_Mode (N);
+ end if;
+
-- Otherwise processing depends on the node kind
case Nkind (N) is
@@ -720,10 +727,7 @@ package body Sem is
Expand (N);
end if;
- -- Restore the original Ghost mode once analysis and expansion have
- -- taken place.
-
- Ghost_Mode := GM;
+ Ghost_Mode := Save_Ghost_Mode;
end Analyze;
-- Version with check(s) suppressed
@@ -1310,9 +1314,7 @@ package body Sem is
----------------
procedure Do_Analyze is
- GM : constant Ghost_Mode_Type := Ghost_Mode;
- -- Save the current Ghost mode in effect in case the compilation unit
- -- is withed from a unit with a different Ghost mode.
+ Save_Ghost_Mode : constant Ghost_Mode_Type := Ghost_Mode;
List : Elist_Id;
@@ -1343,7 +1345,7 @@ package body Sem is
Pop_Scope;
Restore_Scope_Stack (List);
- Ghost_Mode := GM;
+ Ghost_Mode := Save_Ghost_Mode;
end Do_Analyze;
-- Local variables