Commit 83851b23 by Arnaud Charlet

[multiple changes]

2013-04-11  Thomas Quinot  <quinot@adacore.com>

	* sem_util.adb (Set_Entity_With_Style_Check): Fix logic of
	check for implementation defined identifiers.

2013-04-11  Yannick Moy  <moy@adacore.com>

	* checks.adb (Apply_Type_Conversion_Checks): Add an explanation
	of why range check and length are put on different nodes.
	* exp_ch4.adb (Apply_Type_Conversion_Checks): Remove check marks
	when doing their expansion.

From-SVN: r197776
parent e6425869
2013-04-11 Thomas Quinot <quinot@adacore.com>
* sem_util.adb (Set_Entity_With_Style_Check): Fix logic of
check for implementation defined identifiers.
2013-04-11 Yannick Moy <moy@adacore.com>
* checks.adb (Apply_Type_Conversion_Checks): Add an explanation
of why range check and length are put on different nodes.
* exp_ch4.adb (Apply_Type_Conversion_Checks): Remove check marks
when doing their expansion.
2013-04-11 Ed Schonberg <schonberg@adacore.com>
* sem_util.ads, sem_util.adb (Get_Incomplete_View_Of_Ancestor):
......
......@@ -3248,7 +3248,9 @@ package body Checks is
-- expansion, to take into accounts changes of representation. The
-- checks become range checks on the base type or length checks on the
-- subtype, depending on whether the target type is unconstrained or
-- constrained.
-- constrained. Note that the range check is put on the expression of a
-- type conversion, while the length check is put on the type conversion
-- itself.
elsif Is_Array_Type (Target_Type) then
if Is_Constrained (Target_Type) then
......
......@@ -10053,6 +10053,19 @@ package body Exp_Ch4 is
-- Start of processing for Expand_N_Type_Conversion
begin
-- First remove check marks put by the semantic analysis on the type
-- conversion between array types. The front end expands these checks
-- explicitly, so they should not be set in the tree passed to the back
-- end.
if Is_Array_Type (Target_Type) then
if Is_Constrained (Target_Type) then
Set_Do_Length_Check (N, False);
else
Set_Do_Range_Check (Operand, False);
end if;
end if;
-- Nothing at all to do if conversion is to the identical type so remove
-- the conversion completely, it is useless, except that it may carry
-- an Assignment_OK attribute, which must be propagated to the operand.
......
......@@ -13419,9 +13419,10 @@ package body Sem_Util is
-- the entities within it).
if (Is_Implementation_Defined (Val)
or else
Is_Implementation_Defined (Scope (Val)))
and then not (Ekind_In (Val, E_Package, E_Generic_Package)
and then Is_Library_Level_Entity (Val)))
or else Is_Implementation_Defined (Scope (Val))
and then Is_Library_Level_Entity (Val))
then
Check_Restriction (No_Implementation_Identifiers, N);
end if;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment