separate (ErrorHandler.Conversions.ToString.UncondFlowErr)
procedure UncondFlowErrExpl (E_Str   : in out E_Strings.T)

is
begin
   case Err_Type is
      when ErrorHandler.Expn_Undefined =>
         E_Strings.Append_String
            (E_Str => E_Str,
             Str   => "The expression may be that in an assignment or return statement," &
              " an actual parameter," &
              " or a condition occurring in an if or case statement, an iteration" &
              " scheme or exit statement.  NOTE:  the presence of random and possibly invalid values" &
              " introduced by data flow errors invalidates proof of exception freedom for the" &
              " subprogram body which contains them.  All unconditional data flow errors must be" &
              " eliminated before attempting exception freedom proofs.  See the manual" &
              " ""SPARK Proof Manual"" for full details.");
      when ErrorHandler.Stmt_Undefined =>
         E_Strings.Append_String
            (E_Str => E_Str,
             Str   => "The statement here is a procedure call or an assignment to an array element, and the variable XXX may" &
              " appear in an actual parameter, whose value is imported when the" &
              " procedure is executed. If the variable XXX" &
              " does not occur in the actual parameter list, it is an imported" &
              " global variable of the procedure (named in its global definition)." &
              " NOTE:  the presence of random and possibly invalid values" &
              " introduced by data flow errors invalidates proof of exception freedom for the" &
              " subprogram body which contains them.  All unconditional data flow errors must be" &
              " eliminated before attempting exception freedom proofs.  See the manual" &
              " ""SPARK Proof Manual"" for full details.");
      when ErrorHandler.Invariant_Exp =>
         E_Strings.Append_String
            (E_Str => E_Str,
             Str   => "The expression is either a case expression or a condition" &
              " (Boolean-valued expression) associated with an if-statement, not" &
              " contained in a loop statement. The message indicates" &
              " that the expression takes the same value whenever it is evaluated," &
              " in all program executions.  Note that if the expression depends on values obtained" &
              " by a call to another other subprogram then a possible source for its invariance" &
              " might be an incorrect annotation on the called subprogram.");
      when others => null;
   end case;
end UncondFlowErrExpl;
