aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2012-08-06 10:32:05 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2012-08-06 10:32:05 +0200
commitd7f41b2d87214f6e014f3091a2956f0170a8b41e (patch)
tree12975f2e3a8b23ed0c0213b9a2ad7b12d75829b4 /gcc
parent3217f71e44777466c8aab40ddd22d0ed3ca5ce3d (diff)
downloadgcc-d7f41b2d87214f6e014f3091a2956f0170a8b41e.zip
gcc-d7f41b2d87214f6e014f3091a2956f0170a8b41e.tar.gz
gcc-d7f41b2d87214f6e014f3091a2956f0170a8b41e.tar.bz2
[multiple changes]
2012-08-06 Yannick Moy <moy@adacore.com> * sem_ch4.adb (Analyze_Selected_Component): Issue an error in Alfa mode for component not present. 2012-08-06 Thomas Quinot <quinot@adacore.com> * exp_ch7.adb (Insert_Actions_In_Scope_Around): Do not use a renaming of Scope_Stack.Table (Scope_Stack.Last), as Process_Transient_Object may introduce new scopes and cause Scope_Stack.Table to be reallocated. From-SVN: r190167
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog12
-rw-r--r--gcc/ada/exp_ch7.adb16
-rw-r--r--gcc/ada/sem_ch4.adb20
3 files changed, 39 insertions, 9 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index abd977a..e75adb7 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,15 @@
+2012-08-06 Yannick Moy <moy@adacore.com>
+
+ * sem_ch4.adb (Analyze_Selected_Component): Issue an error in
+ Alfa mode for component not present.
+
+2012-08-06 Thomas Quinot <quinot@adacore.com>
+
+ * exp_ch7.adb (Insert_Actions_In_Scope_Around): Do not
+ use a renaming of Scope_Stack.Table (Scope_Stack.Last), as
+ Process_Transient_Object may introduce new scopes and cause
+ Scope_Stack.Table to be reallocated.
+
2012-08-06 Robert Dewar <dewar@adacore.com>
* exp_util.adb, switch-c.adb, inline.ads, sem_ch10.adb, types.ads,
diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb
index 7e28bb4..725cd2a 100644
--- a/gcc/ada/exp_ch7.adb
+++ b/gcc/ada/exp_ch7.adb
@@ -4345,9 +4345,13 @@ package body Exp_Ch7 is
------------------------------------
procedure Insert_Actions_In_Scope_Around (N : Node_Id) is
- SE : Scope_Stack_Entry renames Scope_Stack.Table (Scope_Stack.Last);
- After : List_Id renames SE.Actions_To_Be_Wrapped_After;
- Before : List_Id renames SE.Actions_To_Be_Wrapped_Before;
+ After : constant List_Id :=
+ Scope_Stack.Table (Scope_Stack.Last).Actions_To_Be_Wrapped_After;
+ Before : constant List_Id :=
+ Scope_Stack.Table (Scope_Stack.Last).Actions_To_Be_Wrapped_Before;
+ -- Note: We used to use renamings of Scope_Stack.Table (Scope_Stack.
+ -- Last), but this was incorrect as Process_Transient_Object may
+ -- introduce new scopes and cause a reallocation of Scope_Stack.Table.
procedure Process_Transient_Objects
(First_Object : Node_Id;
@@ -4694,11 +4698,13 @@ package body Exp_Ch7 is
-- Reset the action lists
if Present (Before) then
- Before := No_List;
+ Scope_Stack.Table (Scope_Stack.Last).
+ Actions_To_Be_Wrapped_Before := No_List;
end if;
if Present (After) then
- After := No_List;
+ Scope_Stack.Table (Scope_Stack.Last).
+ Actions_To_Be_Wrapped_After := No_List;
end if;
end;
end Insert_Actions_In_Scope_Around;
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb
index 0430578..557d616 100644
--- a/gcc/ada/sem_ch4.adb
+++ b/gcc/ada/sem_ch4.adb
@@ -4343,10 +4343,22 @@ package body Sem_Ch4 is
-- Emit appropriate message. Gigi will replace the
-- node subsequently with the appropriate Raise.
- Apply_Compile_Time_Constraint_Error
- (N, "component not present in }?",
- CE_Discriminant_Check_Failed,
- Ent => Prefix_Type, Rep => False);
+ -- In Alfa mode, this is an made into an error to
+ -- simplify the treatment of the formal verification
+ -- backend.
+
+ if Alfa_Mode then
+ Apply_Compile_Time_Constraint_Error
+ (N, "component not present in }",
+ CE_Discriminant_Check_Failed,
+ Ent => Prefix_Type, Rep => False);
+ else
+ Apply_Compile_Time_Constraint_Error
+ (N, "component not present in }?",
+ CE_Discriminant_Check_Failed,
+ Ent => Prefix_Type, Rep => False);
+ end if;
+
Set_Raises_Constraint_Error (N);
return;
end if;