* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213568
138bc75d-0d04-0410-961f-
82ee72b054a4
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>
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;
-- 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
-- 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);
-- 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