]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2014-01-29 Robert Dewar <dewar@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Jan 2014 16:17:48 +0000 (16:17 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Jan 2014 16:17:48 +0000 (16:17 +0000)
* sem_util.ads, sem_util.adb (In_Pragma_Expression): New function.
* sem_warn.adb (Check_References): Suppress warnings if inside
Initial_Condition pragma.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@207266 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/sem_util.adb
gcc/ada/sem_util.ads
gcc/ada/sem_warn.adb

index 0f3117977d60b079038448e5eb923a2c32e632a5..fec258c0aba6e35e8e1edbcd2d1ef3361b1a1bfc 100644 (file)
@@ -1,3 +1,9 @@
+2014-01-29  Robert Dewar  <dewar@adacore.com>
+
+       * sem_util.ads, sem_util.adb (In_Pragma_Expression): New function.
+       * sem_warn.adb (Check_References): Suppress warnings if inside
+       Initial_Condition pragma.
+
 2014-01-29  Hristian Kirtchev  <kirtchev@adacore.com>
 
        * sem_prag.adb (Check_Missing_Part_Of): List all values of
index e6b3233fb537daad82a32293269e845da7272807..58a28bbeecb0d3cd5e772154e1229c7507701e17 100644 (file)
@@ -8447,6 +8447,25 @@ package body Sem_Util is
       return False;
    end In_Parameter_Specification;
 
+   --------------------------
+   -- In_Pragma_Expression --
+   --------------------------
+
+   function In_Pragma_Expression (N : Node_Id; Nam : Name_Id) return Boolean is
+      P : Node_Id;
+   begin
+      P := Parent (N);
+      loop
+         if No (P) then
+            return False;
+         elsif Nkind (P) = N_Pragma and then Pragma_Name (P) = Nam then
+            return True;
+         else
+            P := Parent (P);
+         end if;
+      end loop;
+   end In_Pragma_Expression;
+
    -------------------------------------
    -- In_Reverse_Storage_Order_Object --
    -------------------------------------
index 2fe44fc15a4dd93e1dc37d3b81ec20ccad3957e1..5d32cfa64fb201373d8a68aea813f541a995dce7 100644 (file)
@@ -1006,15 +1006,18 @@ package Sem_Util is
    function In_Parameter_Specification (N : Node_Id) return Boolean;
    --  Returns True if node N belongs to a parameter specification
 
+   function In_Pragma_Expression (N : Node_Id; Nam : Name_Id) return Boolean;
+   --  Returns true if the expression N occurs within a pragma with name Nam
+
    function In_Reverse_Storage_Order_Object (N : Node_Id) return Boolean;
    --  Returns True if N denotes a component or subcomponent in a record or
    --  array that has Reverse_Storage_Order.
 
    function In_Subprogram_Or_Concurrent_Unit return Boolean;
    --  Determines if the current scope is within a subprogram compilation unit
-   --  (inside a subprogram declaration, subprogram body, or generic
-   --  subprogram declaration) or within a task or protected body. The test is
-   --  for appearing anywhere within such a construct (that is it does not need
+   --  (inside a subprogram declaration, subprogram body, or generic subprogram
+   --  declaration) or within a task or protected body. The test is for
+   --  appearing anywhere within such a construct (that is it does not need
    --  to be directly within).
 
    function In_Visible_Part (Scope_Id : Entity_Id) return Boolean;
index 62423ea1a8c93692e333f9a87dd4a558997682f9..3c12676c52dc79f182b6ed7cc18d49f919e7cd97 100644 (file)
@@ -1315,6 +1315,14 @@ package body Sem_Warn is
                      UR := Expression (UR);
                   end loop;
 
+                  --  Don't issue warning if appearing inside Initial_Condition
+                  --  pragma or aspect, since that expression is not evaluated
+                  --  at the point where it occurs in the source.
+
+                  if In_Pragma_Expression (UR, Name_Initial_Condition) then
+                     goto Continue;
+                  end if;
+
                   --  Here we issue the warning, all checks completed
 
                   --  If we have a return statement, this was a case of an OUT
@@ -1380,7 +1388,6 @@ package body Sem_Warn is
                               end if;
                            end if;
                         end if;
-
                         --  All other cases of unset reference active
 
                      elsif not Warnings_Off_E1 then