+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,
------------------------------------
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;
-- 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;
-- 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;