Commit 74014283 by Robert Dewar Committed by Arnaud Charlet

exp_attr.adb (Expand_N_Attribute_Reference): Make sure prefix of constructed…

exp_attr.adb (Expand_N_Attribute_Reference): Make sure prefix of constructed 'Valid attribute in -gnatVa mode does not...

2014-08-04  Robert Dewar  <dewar@adacore.com>

	* exp_attr.adb (Expand_N_Attribute_Reference): Make sure prefix
	of constructed 'Valid attribute in -gnatVa mode does not appear
	to come from source.
	* sem_attr.adb (Analyze_Access_Attribute): Don't set
	Never_Set_In_Source for non-source reference.
	* sem_util.adb: Minor reformatting.
	* sem_warn.adb (Check_References): Don't check Address_Taken,
	not necessary, see comment.

From-SVN: r213568
parent 536a2daf
2014-08-04 Robert Dewar <dewar@adacore.com>
* exp_attr.adb (Expand_N_Attribute_Reference): Make sure prefix
of constructed 'Valid attribute in -gnatVa mode does not appear
to come from source.
* sem_attr.adb (Analyze_Access_Attribute): Don't set
Never_Set_In_Source for non-source reference.
* sem_util.adb: Minor reformatting.
* sem_warn.adb (Check_References): Don't check Address_Taken,
not necessary, see comment.
2014-08-04 Robert Dewar <dewar@adacore.com>
* sem_util.adb, sem_case.adb: Minor reformatting.
2014-08-04 Ed Schonberg <schonberg@adacore.com>
......
......@@ -6448,13 +6448,19 @@ package body Exp_Attr is
end if;
-- We now have an object of the proper endianness and
-- alignment, and can call the Valid runtime routine.
-- alignment, and can construct a Valid attribute.
-- We make sure the prefix of this valid attribute is
-- marked as not coming from source, to avoid losing
-- warnings from 'Valid looking like a possible update.
Set_Comes_From_Source (Pref, False);
Expand_Fpt_Attribute
(N, Pkg, Name_Valid,
New_List (
Make_Attribute_Reference (Loc,
Prefix => Unchecked_Convert_To (Ftp, Pref),
Prefix => Unchecked_Convert_To (Ftp, Pref),
Attribute_Name => Name_Unrestricted_Access)));
end case;
......
......@@ -1005,7 +1005,13 @@ package body Sem_Attr is
-- pointer can be used to modify the variable, and we might
-- not detect this, leading to some junk warnings.
Set_Never_Set_In_Source (Ent, False);
-- We only do this for source references, since otherwise
-- we can suppress warnings, e.g. from the unrestricted
-- access generated for validity checks in -gnatVa mode.
if Comes_From_Source (N) then
Set_Never_Set_In_Source (Ent, False);
end if;
-- Mark entity as address taken, and kill current values
......
......@@ -14557,8 +14557,7 @@ package body Sem_Util is
-- this modifies a constant, then give an appropriate warning.
if Overlays_Constant (Ent)
and then Modification_Comes_From_Source
and then Sure
and then (Modification_Comes_From_Source and Sure)
then
declare
A : constant Node_Id := Address_Clause (Ent);
......
......@@ -1110,11 +1110,15 @@ package body Sem_Warn is
-- since a given instance could have modifications outside
-- the package.
-- Note that we used to check Address_Taken here, but we don't
-- want to do that since it can be set for non-source cases,
-- e.g. the Unrestricted_Access from a valid attribute, and
-- the wanted effect is included in Never_Set_In_Source.
elsif Warn_On_Constant
and then (Ekind (E1) = E_Variable
and then Has_Initial_Value (E1))
and then Never_Set_In_Source_Check_Spec (E1)
and then not Address_Taken (E1)
and then not Generic_Package_Spec_Entity (E1)
then
-- A special case, if this variable is volatile and not
......
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