aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/freeze.adb
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2013-01-04 10:08:50 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2013-01-04 10:08:50 +0100
commit3a3af4c32cf7d5f4caf79031da89bc6972cdfbd3 (patch)
tree3266b4f490ae72a9e167f1807975fd0e4f1971e9 /gcc/ada/freeze.adb
parent576f6da6398293734bac71fd55bc7aa07c521dbf (diff)
downloadgcc-3a3af4c32cf7d5f4caf79031da89bc6972cdfbd3.zip
gcc-3a3af4c32cf7d5f4caf79031da89bc6972cdfbd3.tar.gz
gcc-3a3af4c32cf7d5f4caf79031da89bc6972cdfbd3.tar.bz2
[multiple changes]
2013-01-04 Thomas Quinot <quinot@adacore.com> * sinfo.ads: Minor documentation update. 2013-01-04 Thomas Quinot <quinot@adacore.com> * sem_ch3.adb, einfo.adb (Analyze_Object_Declaration): Do not set Ekind before resolving initialization expression. 2013-01-04 Hristian Kirtchev <kirtchev@adacore.com> * checks.adb (Generate_Index_Checks): Delay the generation of the check for an indexed component where the prefix mentions Loop_Entry until the attribute has been properly expanded. * exp_ch5.adb (Expand_Loop_Entry_Attributes): Perform minor decoration of the constant that captures the value of Loop_Entry's prefix at the entry point into a loop. Generate index checks for an attribute reference that has been transformed into an indexed component. 2013-01-04 Thomas Quinot <quinot@adacore.com> * exp_prag.adb, exp_util.adb, exp_util.ads, freeze.adb, exp_aggr.adb, sem_ch13.adb (Exp_Aggr.Collect_Initialization_Statements): Nothing to do if Obj is already frozen. (Exp_Util.Find_Init_Call): Rename to... (Exp_Util.Remove_Init_Call): New subprogram, renamed from Find_Init_Call. Remove the initialization call from the enclosing list if found, and if it is from an Initialization_Statements attribute, reset it. (Exp_Util.Append_Freeze_Action): Minor code reorganization. (Exp_Util.Append_Freeze_Actions): Ensure a freeze node has been allocated (as is already done in Append_Freeze_Action). (Freeze.Freeze_Entity): For an object with captured Initialization_Statements and non-delayed freezeing, unwrap the initialization statements and insert and them directly in the enclosing list. (Sem_Ch13.Check_Address_Clause): For an object with Initialization_Statements and an address clause, unwrap the initialization statements when moving them to the freeze actions. From-SVN: r194887
Diffstat (limited to 'gcc/ada/freeze.adb')
-rw-r--r--gcc/ada/freeze.adb25
1 files changed, 25 insertions, 0 deletions
diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb
index fdf8ac4..bf71111 100644
--- a/gcc/ada/freeze.adb
+++ b/gcc/ada/freeze.adb
@@ -3344,6 +3344,31 @@ package body Freeze is
then
Layout_Object (E);
end if;
+
+ -- If initialization statements were captured in an expression
+ -- with actions with null expression, and the object does not
+ -- have delayed freezing, move them back now directly within the
+ -- enclosing statement sequence.
+
+ if Ekind_In (E, E_Constant, E_Variable)
+ and then not Has_Delayed_Freeze (E)
+ then
+ declare
+ Init_Stmts : constant Node_Id :=
+ Initialization_Statements (E);
+ begin
+ if Present (Init_Stmts)
+ and then Nkind (Init_Stmts) = N_Expression_With_Actions
+ and then Nkind (Expression (Init_Stmts))
+ = N_Null_Statement
+ then
+ Insert_List_Before (Init_Stmts, Actions (Init_Stmts));
+ Remove (Init_Stmts);
+ Set_Initialization_Statements (E, Empty);
+ end if;
+ end;
+ end if;
+
end if;
-- Case of a type or subtype being frozen