2014-08-04 Robert Dewar <dewar@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Aug 2014 10:46:25 +0000 (10:46 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Aug 2014 10:46:25 +0000 (10:46 +0000)
* 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

gcc/ada/ChangeLog
gcc/ada/exp_attr.adb
gcc/ada/sem_attr.adb
gcc/ada/sem_util.adb
gcc/ada/sem_warn.adb

index 0d70e1b..ea25404 100644 (file)
@@ -1,5 +1,16 @@
 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>
index f9c1745..d2cd8e4 100644 (file)
@@ -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;
 
index aecb69a..cdb3cfe 100644 (file)
@@ -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
 
index dd6206d..832c320 100644 (file)
@@ -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);
index d52e2d7..e8c8f0b 100644 (file)
@@ -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