+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
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 --
-------------------------------------
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;
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
end if;
end if;
end if;
-
-- All other cases of unset reference active
elsif not Warnings_Off_E1 then