[multiple changes]
authorPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 9 Nov 2017 11:33:12 +0000 (11:33 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 9 Nov 2017 11:33:12 +0000 (11:33 +0000)
2017-11-09  Yannick Moy  <moy@adacore.com>

* binde.adb (Diagnose_Elaboration_Problem): Mark procedure No_Return.
* checks.adb (Apply_Scalar_Range_Check): Rescope variable OK closer to
use.  Default initialize Hi, Lo.
(Selected_Range_Checks): Retype Num_Checks more precisely.
(Determine_Range, Determine_Range_R): Default initialize Hi_Right,
Lo_Right.
* contracts.adb (Process_Contract_Cases): Mark parameter Stmts as
Unmodified.
(Process_Postconditions): Mark parameter Stmts as Unmodified.
* exp_attr.adb (Expand_Loop_Entry_Attribute): Default initialize Blk.
* exp_ch4.adb (Expand_N_Allocator): Default initialize Typ.
(Expand_Concatenate): Default initialize High_Bound.
(Optimize_Length_Comparison): Default initialize Ent, Index.
* exp_ch5.adb (Expand_Predicated_Loop): Default initialize L_Hi and
L_Lo.
* exp_ch6.adb (Expand_N_Extended_Return_Statement): Default initialize
Return_Stmt.
* exp_ch9.adb (Expand_Entry_Barrier): Default initialize Func_Body and
remove pragma Warnings(Off).
* exp_imgv.adb (Expand_Image_Attribute): Default initialize Tent.
* exp_util.adb (Find_Interface_Tag): Default initialize AI_Tag.
* freeze.adb (Check_Component_Storage_Order): Default initialize
Comp_Byte_Aligned rather than silencing messages with pragma
Warnings(Off), which does not work for CodePeer initialization
messages, and given that here the possible read of an unitialized value
depends on a proper use of parameters by the caller.
* inline.adb (Expand_Inlined_Call): Default initialize Lab_Decl, Targ.
* sem_ch12.adb (Build_Operator_Wrapper): Default initialize Expr.
* sem_ch3.adb (Build_Derived_Array_Type): Default initialize
Implicit_Base.
* sem_ch4.adb (List_Operand_Interps): Default initialize Nam and remove
pragma Warnings(Off).
(Analyze_Case_Expression): Rescope checking block within branch where
Others_Present is set by the call to Check_Choices.
* sem_ch5.adb (Analyze_Assignment): Default initialize
Save_Full_Analysis.
* sem_ch6.adb (Analyze_Function_Return): Default initialize Obj_Decl,
and restructure code to defend against previous errors, so that, in
that case, control does not flow to the elsif condition which read an
uninitialized Obj_Decl.
* sem_ch9.adb (Analyze_Requeue): Default initialize Synch_Type.
(Check_Interfaces): Default initialize Full_T_Ifaces and Priv_T_Ifaces,
which seem to be left uninitialized and possibly read in some cases.
* sem_dim.adb (Analyze_Aspect_Dimension_System): Retype Position more
precisely.  This requires to exchange the test for exiting in case of
too many positions and the increment to Position, inside the loop.
* sem_eval.adb (Eval_Concatenation): Default initialize Folded_Val,
which cannot be read uninitialized, but the reasons for that are quite
subtle.
* sem_intr.adb (Check_Intrinsic_Call): Default initialize Rtyp.
* sem_prag.adb (Collect_Subprogram_Inputs_Outputs): Default initialize
Spec_Id.
* sem_res.adb (Make_Call_Into_Operator): Default initialize Opnd_Type,
and test for presence of non-null Opnd_Type before testing its scope,
in a test which would read its value uninitialized, and is very rarely
exercized (it depends on the presence of an extension of System).
* sem_spark.ads: Update comment to fix name of main analysis procedure.
* sem_warn.adb (Warn_On_Known_Condition): Default initialize
Test_Result.
* set_targ.adb (FailN): Mark procedure with No_Return.
* stylesw.adb (Save_Style_Check_Options): Delete useless code to
initialize all array Options to white space, as there is already code
doing the same for the remaining positions in Options at the end of the
procedure.

2017-11-09  Eric Botcazou  <ebotcazou@adacore.com>

* exp_ch11.adb (Possible_Local_Raise): Do not issue the warning for
generic instantiations either.

From-SVN: r254570

29 files changed:
gcc/ada/ChangeLog
gcc/ada/binde.adb
gcc/ada/checks.adb
gcc/ada/contracts.adb
gcc/ada/exp_attr.adb
gcc/ada/exp_ch11.adb
gcc/ada/exp_ch4.adb
gcc/ada/exp_ch5.adb
gcc/ada/exp_ch6.adb
gcc/ada/exp_ch9.adb
gcc/ada/exp_imgv.adb
gcc/ada/exp_util.adb
gcc/ada/freeze.adb
gcc/ada/inline.adb
gcc/ada/sem_ch12.adb
gcc/ada/sem_ch3.adb
gcc/ada/sem_ch4.adb
gcc/ada/sem_ch5.adb
gcc/ada/sem_ch6.adb
gcc/ada/sem_ch9.adb
gcc/ada/sem_dim.adb
gcc/ada/sem_eval.adb
gcc/ada/sem_intr.adb
gcc/ada/sem_prag.adb
gcc/ada/sem_res.adb
gcc/ada/sem_spark.ads
gcc/ada/sem_warn.adb
gcc/ada/set_targ.adb
gcc/ada/stylesw.adb

index 1e599d03aa271a2e477ac9dd7305d878f9552bb7..f612544118a6066e631353697a8edc394925c1fd 100644 (file)
@@ -1,3 +1,75 @@
+2017-11-09  Yannick Moy  <moy@adacore.com>
+
+       * binde.adb (Diagnose_Elaboration_Problem): Mark procedure No_Return.
+       * checks.adb (Apply_Scalar_Range_Check): Rescope variable OK closer to
+       use.  Default initialize Hi, Lo.
+       (Selected_Range_Checks): Retype Num_Checks more precisely.
+       (Determine_Range, Determine_Range_R): Default initialize Hi_Right,
+       Lo_Right.
+       * contracts.adb (Process_Contract_Cases): Mark parameter Stmts as
+       Unmodified.
+       (Process_Postconditions): Mark parameter Stmts as Unmodified.
+       * exp_attr.adb (Expand_Loop_Entry_Attribute): Default initialize Blk.
+       * exp_ch4.adb (Expand_N_Allocator): Default initialize Typ.
+       (Expand_Concatenate): Default initialize High_Bound.
+       (Optimize_Length_Comparison): Default initialize Ent, Index.
+       * exp_ch5.adb (Expand_Predicated_Loop): Default initialize L_Hi and
+       L_Lo.
+       * exp_ch6.adb (Expand_N_Extended_Return_Statement): Default initialize
+       Return_Stmt.
+       * exp_ch9.adb (Expand_Entry_Barrier): Default initialize Func_Body and
+       remove pragma Warnings(Off).
+       * exp_imgv.adb (Expand_Image_Attribute): Default initialize Tent.
+       * exp_util.adb (Find_Interface_Tag): Default initialize AI_Tag.
+       * freeze.adb (Check_Component_Storage_Order): Default initialize
+       Comp_Byte_Aligned rather than silencing messages with pragma
+       Warnings(Off), which does not work for CodePeer initialization
+       messages, and given that here the possible read of an unitialized value
+       depends on a proper use of parameters by the caller.
+       * inline.adb (Expand_Inlined_Call): Default initialize Lab_Decl, Targ.
+       * sem_ch12.adb (Build_Operator_Wrapper): Default initialize Expr.
+       * sem_ch3.adb (Build_Derived_Array_Type): Default initialize
+       Implicit_Base.
+       * sem_ch4.adb (List_Operand_Interps): Default initialize Nam and remove
+       pragma Warnings(Off).
+       (Analyze_Case_Expression): Rescope checking block within branch where
+       Others_Present is set by the call to Check_Choices.
+       * sem_ch5.adb (Analyze_Assignment): Default initialize
+       Save_Full_Analysis.
+       * sem_ch6.adb (Analyze_Function_Return): Default initialize Obj_Decl,
+       and restructure code to defend against previous errors, so that, in
+       that case, control does not flow to the elsif condition which read an
+       uninitialized Obj_Decl.
+       * sem_ch9.adb (Analyze_Requeue): Default initialize Synch_Type.
+       (Check_Interfaces): Default initialize Full_T_Ifaces and Priv_T_Ifaces,
+       which seem to be left uninitialized and possibly read in some cases.
+       * sem_dim.adb (Analyze_Aspect_Dimension_System): Retype Position more
+       precisely.  This requires to exchange the test for exiting in case of
+       too many positions and the increment to Position, inside the loop.
+       * sem_eval.adb (Eval_Concatenation): Default initialize Folded_Val,
+       which cannot be read uninitialized, but the reasons for that are quite
+       subtle.
+       * sem_intr.adb (Check_Intrinsic_Call): Default initialize Rtyp.
+       * sem_prag.adb (Collect_Subprogram_Inputs_Outputs): Default initialize
+       Spec_Id.
+       * sem_res.adb (Make_Call_Into_Operator): Default initialize Opnd_Type,
+       and test for presence of non-null Opnd_Type before testing its scope,
+       in a test which would read its value uninitialized, and is very rarely
+       exercized (it depends on the presence of an extension of System).
+       * sem_spark.ads: Update comment to fix name of main analysis procedure.
+       * sem_warn.adb (Warn_On_Known_Condition): Default initialize
+       Test_Result.
+       * set_targ.adb (FailN): Mark procedure with No_Return.
+       * stylesw.adb (Save_Style_Check_Options): Delete useless code to
+       initialize all array Options to white space, as there is already code
+       doing the same for the remaining positions in Options at the end of the
+       procedure.
+
+2017-11-09  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * exp_ch11.adb (Possible_Local_Raise): Do not issue the warning for
+       generic instantiations either.
+
 2017-11-09  Piotr Trojanek  <trojanek@adacore.com>
 
        * sem_prag.adb (Analyze_Part_Of): Reword error message.
index dd076be3acf2b882ef740dc58274d25e49f63e2b..5a78bc824994eb315ededbc1af9c70ef8b0e6967 100644 (file)
@@ -353,6 +353,7 @@ package body Binde is
 
    procedure Diagnose_Elaboration_Problem
      (Elab_Order : in out Unit_Id_Table);
+   pragma No_Return (Diagnose_Elaboration_Problem);
    --  Called when no elaboration order can be found. Outputs an appropriate
    --  diagnosis of the problem, and then abandons the bind.
 
index b2c26ca4981fda382878bffd690d578cced8ef1b..c4b37e788ab644177f85340463fa4b38b8842267 100644 (file)
@@ -2765,7 +2765,6 @@ package body Checks is
       S_Typ   : Entity_Id;
       Arr     : Node_Id   := Empty;  -- initialize to prevent warning
       Arr_Typ : Entity_Id := Empty;  -- initialize to prevent warning
-      OK      : Boolean   := False;  -- initialize to prevent warning
 
       Is_Subscr_Ref : Boolean;
       --  Set true if Expr is a subscript
@@ -2995,10 +2994,11 @@ package body Checks is
               and then Compile_Time_Known_Value (Thi)
             then
                declare
+                  OK  : Boolean := False;  -- initialize to prevent warning
                   Hiv : constant Uint := Expr_Value (Thi);
                   Lov : constant Uint := Expr_Value (Tlo);
-                  Hi  : Uint;
-                  Lo  : Uint;
+                  Hi  : Uint := No_Uint;
+                  Lo  : Uint := No_Uint;
 
                begin
                   --  If range is null, we for sure have a constraint error (we
@@ -4370,8 +4370,8 @@ package body Checks is
       Hi_Left : Uint;
       --  Lo and Hi bounds of left operand
 
-      Lo_Right : Uint;
-      Hi_Right : Uint;
+      Lo_Right : Uint := No_Uint;
+      Hi_Right : Uint := No_Uint;
       --  Lo and Hi bounds of right (or only) operand
 
       Bound : Node_Id;
@@ -4909,8 +4909,8 @@ package body Checks is
       Hi_Left : Ureal;
       --  Lo and Hi bounds of left operand
 
-      Lo_Right : Ureal;
-      Hi_Right : Ureal;
+      Lo_Right : Ureal := No_Ureal;
+      Hi_Right : Ureal := No_Ureal;
       --  Lo and Hi bounds of right (or only) operand
 
       Bound : Node_Id;
@@ -9814,7 +9814,7 @@ package body Checks is
       Do_Access   : Boolean := False;
       Wnode       : Node_Id  := Warn_Node;
       Ret_Result  : Check_Result := (Empty, Empty);
-      Num_Checks  : Integer := 0;
+      Num_Checks  : Natural := 0;
 
       procedure Add_Check (N : Node_Id);
       --  Adds the action given to Ret_Result if N is non-Empty
index 8a35b82f55e84c2211f2fbb2a7c563a059e83f2c..89fc286bf5b4c1224ac2e65d4339917c429046e8 100644 (file)
@@ -2393,6 +2393,11 @@ package body Contracts is
             end if;
          end Process_Contract_Cases_For;
 
+         pragma Unmodified (Stmts);
+         --  Stmts is passed as IN OUT to signal that the list can be updated,
+         --  even if the corresponding integer value representing the list does
+         --  not change.
+
       --  Start of processing for Process_Contract_Cases
 
       begin
@@ -2535,6 +2540,11 @@ package body Contracts is
             end loop;
          end Process_Spec_Postconditions;
 
+         pragma Unmodified (Stmts);
+         --  Stmts is passed as IN OUT to signal that the list can be updated,
+         --  even if the corresponding integer value representing the list does
+         --  not change.
+
       --  Start of processing for Process_Postconditions
 
       begin
index 70d39b7a9167582749865ffa6c18e90676563b06..79c6524769bd36d80d9a516c5ec0f3204dd15a77 100644 (file)
@@ -1054,7 +1054,7 @@ package body Exp_Attr is
       Base_Typ  : constant Entity_Id := Base_Type (Etype (Pref));
       Exprs     : constant List_Id   := Expressions (N);
       Aux_Decl  : Node_Id;
-      Blk       : Node_Id;
+      Blk       : Node_Id := Empty;
       Decls     : List_Id;
       Installed : Boolean;
       Loc       : Source_Ptr;
index 7941cbd2ca620760d0561164b00d3b5916e738a5..c4bf096cab72ae75de2aa1a3bd1a08e24cb58a2e 100644 (file)
@@ -1855,11 +1855,13 @@ package body Exp_Ch11 is
          --  and the warning is enabled, generate the appropriate warnings.
 
          --  ??? Do not do it for the Call_Marker nodes inserted by the ABE
-         --  mechanism because this generates too many false positives.
+         --  mechanism because this generates too many false positives, or
+         --  for generic instantiations for the same reason.
 
          elsif Warn_On_Non_Local_Exception
            and then Restriction_Active (No_Exception_Propagation)
            and then Nkind (N) /= N_Call_Marker
+           and then Nkind (N) not in N_Generic_Instantiation
          then
             Warn_No_Exception_Propagation_Active (N);
 
index 86d488392a91b0c8a085e35bc32504b2fbae072c..a2aa25b8d59076a45a08fea28a5f88d945b2eefb 100644 (file)
@@ -2766,7 +2766,7 @@ package body Exp_Ch4 is
       --  special case of setting the right high bound for a null result.
       --  This is of type Ityp.
 
-      High_Bound : Node_Id;
+      High_Bound : Node_Id := Empty;
       --  A tree node representing the high bound of the result (of type Ityp)
 
       Result : Node_Id;
@@ -4800,7 +4800,7 @@ package body Exp_Ch4 is
 
                declare
                   Dis : Boolean := False;
-                  Typ : Entity_Id;
+                  Typ : Entity_Id := Empty;
 
                begin
                   if Has_Discriminants (T) then
@@ -13112,10 +13112,10 @@ package body Exp_Ch4 is
       Comp : Node_Id;
       --  Comparison operand, set only if Is_Zero is false
 
-      Ent : Entity_Id;
+      Ent : Entity_Id := Empty;
       --  Entity whose length is being compared
 
-      Index : Node_Id;
+      Index : Node_Id := Empty;
       --  Integer_Literal node for length attribute expression, or Empty
       --  if there is no such expression present.
 
index 9d2f652f11983ab4fa745c3ffef27b06cc7d348d..d98e725d85ff260c4bae85ad16f5b9e26edf767d 100644 (file)
@@ -4769,8 +4769,8 @@ package body Exp_Ch5 is
 
             --  If the domain is an itype, note the bounds of its range.
 
-            L_Hi  : Node_Id;
-            L_Lo  : Node_Id;
+            L_Hi  : Node_Id := Empty;
+            L_Lo  : Node_Id := Empty;
 
             function Lo_Val (N : Node_Id) return Node_Id;
             --  Given static expression or static range, returns an identifier
index bca7e5deae4781ac409d4e681c612e829c797ff7..357979e663ec63247b8ee7ef9ff66532ebcd7d3f 100644 (file)
@@ -4721,9 +4721,11 @@ package body Exp_Ch6 is
       Exp         : Node_Id;
       HSS         : Node_Id;
       Result      : Node_Id;
-      Return_Stmt : Node_Id;
       Stmts       : List_Id;
 
+      Return_Stmt : Node_Id := Empty;
+      --  Force initialization to facilitate static analysis
+
    --  Start of processing for Expand_N_Extended_Return_Statement
 
    begin
index b8f6d99390fb36ab4bf6b64d35eab9e91808d6db..2afd652ba4bcdc1ed7c44ab1c593b5a0c6c61f86 100644 (file)
@@ -6189,8 +6189,7 @@ package body Exp_Ch9 is
 
       Cond_Id    : Entity_Id;
       Entry_Body : Node_Id;
-      Func_Body  : Node_Id;
-      pragma Warnings (Off, Func_Body);
+      Func_Body  : Node_Id := Empty;
 
    --  Start of processing for Expand_Entry_Barrier
 
index 78777075d8bc2dda021b9f77da8eb6a4803c3b76..6f6b008f99f5ef5c2d4cf6503e0f88ba54bb662c 100644 (file)
@@ -436,7 +436,7 @@ package body Exp_Imgv is
       Imid      : RE_Id;
       Ptyp      : Entity_Id;
       Rtyp      : Entity_Id;
-      Tent      : Entity_Id;
+      Tent      : Entity_Id := Empty;
       Ttyp      : Entity_Id;
       Proc_Ent  : Entity_Id;
       Enum_Case : Boolean;
index d5e8e09c94183e45f05121428906d95b7ad6e0a8..698bf76c2c1c32fb9b4a78f6a117bcdba08390e8 100644 (file)
@@ -5447,7 +5447,7 @@ package body Exp_Util is
      (T     : Entity_Id;
       Iface : Entity_Id) return Entity_Id
    is
-      AI_Tag : Entity_Id;
+      AI_Tag : Entity_Id := Empty;
       Found  : Boolean   := False;
       Typ    : Entity_Id := T;
 
index a106d68ae8627934c5fe006dc2f8cbe0a64759e6..ba81a55cfa51bb621b6659a71a53cf22eac177c3 100644 (file)
@@ -1173,8 +1173,7 @@ package body Freeze is
 
       Component_Aliased : Boolean;
 
-      Comp_Byte_Aligned : Boolean;
-      pragma Warnings (Off, Comp_Byte_Aligned);
+      Comp_Byte_Aligned : Boolean := False;
       --  Set for the record case, True if Comp is aligned on byte boundaries
       --  (in which case it is allowed to have different storage order).
 
index 7096f7c7431ab008e6ef3fa19f26d9e581a0c646..f97fce782f46ced365c9ed45d8ca1d6415a24533 100644 (file)
@@ -2224,13 +2224,13 @@ package body Inline is
       Exit_Lab : Entity_Id        := Empty;
       F        : Entity_Id;
       A        : Node_Id;
-      Lab_Decl : Node_Id;
+      Lab_Decl : Node_Id          := Empty;
       Lab_Id   : Node_Id;
       New_A    : Node_Id;
-      Num_Ret  : Nat := 0;
+      Num_Ret  : Nat              := 0;
       Ret_Type : Entity_Id;
 
-      Targ : Node_Id;
+      Targ : Node_Id := Empty;
       --  The target of the call. If context is an assignment statement then
       --  this is the left-hand side of the assignment, else it is a temporary
       --  to which the return value is assigned prior to rewriting the call.
index ac5035fd1bc6acdcdc7efde369c212819bd4455d..562653f58f4a4fb73a938be23caf8d04c51b2eeb 100644 (file)
@@ -5895,8 +5895,7 @@ package body Sem_Ch12 is
                     Present (Next_Formal (First_Formal (Formal_Subp)));
 
       Decl    : Node_Id;
-      Expr    : Node_Id;
-      pragma Warnings (Off, Expr);
+      Expr    : Node_Id := Empty;
       F1, F2  : Entity_Id;
       Func    : Entity_Id;
       Op_Name : Name_Id;
index 1e3b78ccf2f0f070609d5944c80d1018b1f539e8..75c624b472a1b3c3985a159ab0dc3c5647483aeb 100644 (file)
@@ -6639,7 +6639,7 @@ package body Sem_Ch3 is
       Tdef          : constant Node_Id    := Type_Definition (N);
       Indic         : constant Node_Id    := Subtype_Indication (Tdef);
       Parent_Base   : constant Entity_Id  := Base_Type (Parent_Type);
-      Implicit_Base : Entity_Id;
+      Implicit_Base : Entity_Id           := Empty;
       New_Indic     : Node_Id;
 
       procedure Make_Implicit_Base;
@@ -6751,7 +6751,7 @@ package body Sem_Ch3 is
                                                           N_Subtype_Indication;
 
       D_Constraint   : Node_Id;
-      New_Constraint : Elist_Id;
+      New_Constraint : Elist_Id := No_Elist;
       Old_Disc       : Entity_Id;
       New_Disc       : Entity_Id;
       New_N          : Node_Id;
index c8ef8d8e0956a6c01cc3b447d972d073895af438..3102678c364cc1719b8f55e7e7b8eda0cde5bb2f 100644 (file)
@@ -339,9 +339,8 @@ package body Sem_Ch4 is
       --------------------------
 
       procedure List_Operand_Interps (Opnd : Node_Id) is
-         Nam   : Node_Id;
-         pragma Warnings (Off, Nam);
-         Err   : Node_Id := N;
+         Nam : Node_Id := Empty;
+         Err : Node_Id := N;
 
       begin
          if Is_Overloaded (Opnd) then
@@ -1720,11 +1719,11 @@ package body Sem_Ch4 is
       else
          Analyze_Choices (Alternatives (N), Exp_Type);
          Check_Choices (N, Alternatives (N), Exp_Type, Others_Present);
-      end if;
 
-      if Exp_Type = Universal_Integer and then not Others_Present then
-         Error_Msg_N
-           ("case on universal integer requires OTHERS choice", Expr);
+         if Exp_Type = Universal_Integer and then not Others_Present then
+            Error_Msg_N
+              ("case on universal integer requires OTHERS choice", Expr);
+         end if;
       end if;
    end Analyze_Case_Expression;
 
index 10002ea08c2a4ce84025af79302b7d7898bb9ba6..14cf2e5a732fbc04f3f8156e8572b627c7ffc384 100644 (file)
@@ -391,7 +391,8 @@ package body Sem_Ch5 is
       T1 : Entity_Id;
       T2 : Entity_Id;
 
-      Save_Full_Analysis : Boolean;
+      Save_Full_Analysis : Boolean := False;
+      --  Force initialization to facilitate static analysis
 
       Saved_GM : constant Ghost_Mode_Type := Ghost_Mode;
       --  Save the Ghost mode to restore on exit
index 5dc92d28634f086172e0d10573d4f7df25eeebad..266b6fef4a16ae9887cf962f6aaade047ebf9282 100644 (file)
@@ -1039,7 +1039,7 @@ package body Sem_Ch6 is
       ---------------------
 
       Expr     : Node_Id;
-      Obj_Decl : Node_Id;
+      Obj_Decl : Node_Id := Empty;
 
    --  Start of processing for Analyze_Function_Return
 
@@ -1190,13 +1190,16 @@ package body Sem_Ch6 is
 
       --  Case of Expr present
 
-      if Present (Expr)
+      if Present (Expr) then
 
-        --  Defend against previous errors
+         --  Defend against previous errors
+
+         if Nkind (Expr) = N_Empty
+           or else No (Etype (Expr))
+         then
+            return;
+         end if;
 
-        and then Nkind (Expr) /= N_Empty
-        and then Present (Etype (Expr))
-      then
          --  Apply constraint check. Note that this is done before the implicit
          --  conversion of the expression done for anonymous access types to
          --  ensure correct generation of the null-excluding check associated
index 199cd8a8c7a65778ae05e251faf1cf3162247517..98f2ccc47565fe80aacc78e3a20a74bf515bce40 100644 (file)
@@ -2287,7 +2287,7 @@ package body Sem_Ch9 is
       Target_Obj  : Node_Id := Empty;
       Req_Scope   : Entity_Id;
       Outer_Ent   : Entity_Id;
-      Synch_Type  : Entity_Id;
+      Synch_Type  : Entity_Id := Empty;
 
    begin
       --  Preserve relevant elaboration-related attributes of the context which
@@ -3513,10 +3513,10 @@ package body Sem_Ch9 is
       --  declarations. Search for the private type declaration.
 
       declare
-         Full_T_Ifaces : Elist_Id;
+         Full_T_Ifaces : Elist_Id := No_Elist;
          Iface         : Node_Id;
          Priv_T        : Entity_Id;
-         Priv_T_Ifaces : Elist_Id;
+         Priv_T_Ifaces : Elist_Id := No_Elist;
 
       begin
          Priv_T := First_Entity (Scope (T));
index a271ca559602ea91c521461495099d8e7bcc58da..44166002ee9028e50c59e1371c7b7f3c6f531160 100644 (file)
@@ -903,13 +903,13 @@ package body Sem_Dim is
       Choice       : Node_Id;
       Dim_Aggr     : Node_Id;
       Dim_Symbol   : Node_Id;
-      Dim_Symbols  : Symbol_Array := No_Symbols;
-      Dim_System   : System_Type  := Null_System;
-      Position     : Nat := 0;
+      Dim_Symbols  : Symbol_Array       := No_Symbols;
+      Dim_System   : System_Type        := Null_System;
+      Position     : Dimension_Position := Invalid_Position;
       Unit_Name    : Node_Id;
-      Unit_Names   : Name_Array   := No_Names;
+      Unit_Names   : Name_Array         := No_Names;
       Unit_Symbol  : Node_Id;
-      Unit_Symbols : Symbol_Array := No_Symbols;
+      Unit_Symbols : Symbol_Array       := No_Symbols;
 
       Errors_Count : Nat;
       --  Errors_Count is a count of errors detected by the compiler so far
@@ -949,13 +949,13 @@ package body Sem_Dim is
       Dim_Aggr     := First (Expressions (Aggr));
       Errors_Count := Serious_Errors_Detected;
       while Present (Dim_Aggr) loop
-         Position := Position + 1;
-
-         if Position > High_Position_Bound then
+         if Position = High_Position_Bound then
             Error_Msg_N ("too many dimensions in system", Aggr);
             exit;
          end if;
 
+         Position := Position + 1;
+
          if Nkind (Dim_Aggr) /= N_Aggregate then
             Error_Msg_N ("aggregate expected", Dim_Aggr);
 
index 0c6c2ea74725a7664e4360b443b1bfe3433fafd8..01eb8144e68f1ad0e460d55fdfa9ca8d463aa1ee 100644 (file)
@@ -2301,7 +2301,7 @@ package body Sem_Eval is
          Left_Str   : constant Node_Id := Get_String_Val (Left);
          Left_Len   : Nat;
          Right_Str  : constant Node_Id := Get_String_Val (Right);
-         Folded_Val : String_Id;
+         Folded_Val : String_Id        := No_String;
 
       begin
          --  Establish new string literal, and store left operand. We make
index ad8c388c616998bf2733e659fc5e0c9b93801fb0..886c2b4f4326109597b3ac9f091be9fc59e09418 100644 (file)
@@ -101,7 +101,7 @@ package body Sem_Intr is
       Nam  : constant Entity_Id := Entity (Name (N));
       Arg1 : constant Node_Id   := First_Actual (N);
       Typ  : Entity_Id;
-      Rtyp : Entity_Id;
+      Rtyp : Entity_Id := Empty;
       Cnam : Name_Id;
       Unam : Node_Id;
 
index 596f306af3dc610382683e74cc8a34f915b87646..78876ffbf256e41e8a56c090d60810afc30c1d9b 100644 (file)
@@ -28747,7 +28747,7 @@ package body Sem_Prag is
       Depends   : Node_Id;
       Formal    : Entity_Id;
       Global    : Node_Id;
-      Spec_Id   : Entity_Id;
+      Spec_Id   : Entity_Id := Empty;
       Subp_Decl : Node_Id;
       Typ       : Entity_Id;
 
index 49a654f8fd69453754defadf885ecc66a181e440..8646cc06fba9723e645f1676846326ad2c681873 100644 (file)
@@ -1212,7 +1212,7 @@ package body Sem_Res is
       Func      : constant Entity_Id := Entity (Name (N));
       Is_Binary : constant Boolean   := Present (Act2);
       Op_Node   : Node_Id;
-      Opnd_Type : Entity_Id;
+      Opnd_Type : Entity_Id := Empty;
       Orig_Type : Entity_Id := Empty;
       Pack      : Entity_Id;
 
@@ -1523,6 +1523,7 @@ package body Sem_Res is
             --  Operator may be defined in an extension of System
 
             elsif Present (System_Aux_Id)
+              and then Present (Opnd_Type)
               and then Scope (Opnd_Type) = System_Aux_Id
             then
                null;
index d7abd8ad74a31eb2daadb336b852f30f8cb4d7d2..d6977880d47de5560867e2437e35cfbc66565bde 100644 (file)
 --  rules that are enforced are defined in the anti-aliasing section of the
 --  SPARK RM 6.4.2
 --
---  Analyze_SPARK is called by Gnat1drv, when GNATprove mode is activated. It
---  does an analysis of the source code, looking for code that is considered
---  as SPARK and launches another function called Analyze_Node that will do
---  the whole analysis.
+--  Check_Safe_Pointers is called by Gnat1drv, when GNATprove mode is
+--  activated. It does an analysis of the source code, looking for code that is
+--  considered as SPARK and launches another function called Analyze_Node that
+--  will do the whole analysis.
 --
 --  A path is an abstraction of a name, of which all indices, slices (for
 --  indexed components) and function calls have been abstracted and all
index 0e498d3e6cb2cb8ba6b6ff669bf384e8edec7ad0..ff94cf84e413fd1fdc7fc92bc02164b9e0552ac6 100644 (file)
@@ -3344,7 +3344,8 @@ package body Sem_Warn is
    -----------------------------
 
    procedure Warn_On_Known_Condition (C : Node_Id) is
-      Test_Result : Boolean;
+      Test_Result : Boolean := False;
+      --  Force initialization to facilitate static analysis
 
       function Is_Known_Branch return Boolean;
       --  If the type of the condition is Boolean, the constant value of the
index f25c9f84f812717a34aa3c61aaae358f2e82b820..93b71018d89f8b887498c2251a1dc83f26abd1e6 100755 (executable)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2013-2016, Free Software Foundation, Inc.         --
+--          Copyright (C) 2013-2017, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -580,6 +580,7 @@ package body Set_Targ is
       --  Checks that we have one or more spaces and skips them
 
       procedure FailN (S : String);
+      pragma No_Return (FailN);
       --  Calls Fail adding " name in file xxx", where name is the currently
       --  gathered name in Nam_Buf, surrounded by quotes, and xxx is the
       --  name of the file.
index ff8155adfc9ed4b375fc445194325bde580424b7..6f258626b070d533cb37a27b2997e4c89060ff95 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2016, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2017, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -150,10 +150,6 @@ package body Stylesw is
    --  Start of processing for Save_Style_Check_Options
 
    begin
-      for K in Options'Range loop
-         Options (K) := ' ';
-      end loop;
-
       Add (Character'Val (Style_Check_Indentation + Character'Pos ('0')),
            Style_Check_Indentation /= 0);