[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Fri, 28 Apr 2017 13:33:16 +0000 (15:33 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 28 Apr 2017 13:33:16 +0000 (15:33 +0200)
2017-04-28  Eric Botcazou  <ebotcazou@adacore.com>

* exp_ch9.adb (Build_Lock_Free_Unprotected_Subprogram_Body): Also
initialize Block_Decls variable.
(Expand_Entry_Barrier): Add pragma Warnings on Func_Body variable.
(Build_Dispatching_Requeue): Add pragma Warnings on Op variable.
* exp_disp.adb (Expand_Interface_Actuals): Initialize
Formal_DDT and Actual_DDT variables.
(Expand_Interface_Thunk): Initialize Iface_Formal.
(Make_DT): Initialize Size_Comp.
(Make_Select_Specific_Data_Table): Initialize Decls.
* exp_dist.adb (Add_RACW_Primitive_Declarations_And_Bodies):
Also initialize more RPC_Receiver_* variables.
(Build_To_Any_Function): Initialize Cstr_Formal.
* exp_prag.adb (Expand_Pragma_Contract_Cases): Initialize Msg_Str.

2017-04-28  Ed Schonberg  <schonberg@adacore.com>

* sem_ch6.adb (Freeze_Type_Refs): For an interface conversion
node between access types, freeze the designated type as well,
so that dispatch table pointers are created in the proper scope,
and not in the constructed body of the expression function.

2017-04-28  Bob Duff  <duff@adacore.com>

* alloc.ads (Nodes_Initial): Go back to previous value. The large
value makes large compilations faster, but small compilations slower.

2017-04-28  Arnaud Charlet  <charlet@adacore.com>

* sem_util.adb: minor typos in Is_Child_Or_Sibling.

2017-04-28  Hristian Kirtchev  <kirtchev@adacore.com>

* erroutc.adb (Compilation_Errors): Do not consider info messages
as suitable warnings when warnings must be treated as errors.
* sem_ch7.adb (Analyze_Package_Specification): Do not consider
internally-generated packages when outputting completion
information.
* errout.adb (Output_Messages): Do not consider info messages as
suitable warnings when warnings must be treated as errors.
* errutil.adb (Finalize): Do not consider info messages as
suitable warnings when warnings must be treated as errors.

2017-04-28  Eric Botcazou  <ebotcazou@adacore.com>

* warnsw.ads: Minor fix for incorrect wording in comment.

2017-04-28  Ed Schonberg  <schonberg@adacore.com>

* sem_res.adb (In_Instance_Code): New predicate in
Valid_Conversion, to determine whether a type conversion appears
as (or within) an actual for a formal object.  Type conversions
in instances are not rechecked in Valid_Conversion because
visibility changes between generic location andi instance may
lead to spurious errors, but conversions within an actual must be
fully checked, and they are not fully resolved when pre-analyzing
the actuals.

From-SVN: r247385

14 files changed:
gcc/ada/ChangeLog
gcc/ada/alloc.ads
gcc/ada/errout.adb
gcc/ada/erroutc.adb
gcc/ada/errutil.adb
gcc/ada/exp_ch9.adb
gcc/ada/exp_disp.adb
gcc/ada/exp_dist.adb
gcc/ada/exp_prag.adb
gcc/ada/sem_ch6.adb
gcc/ada/sem_ch7.adb
gcc/ada/sem_res.adb
gcc/ada/sem_util.adb
gcc/ada/warnsw.ads

index 209e16e50d9b6572b5e2c9bfbf4ee084527fe605..af976831dab5b55193a79edaca25c5acf8150795 100644 (file)
@@ -1,3 +1,63 @@
+2017-04-28  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * exp_ch9.adb (Build_Lock_Free_Unprotected_Subprogram_Body): Also
+       initialize Block_Decls variable.
+       (Expand_Entry_Barrier): Add pragma Warnings on Func_Body variable.
+       (Build_Dispatching_Requeue): Add pragma Warnings on Op variable.
+       * exp_disp.adb (Expand_Interface_Actuals): Initialize
+       Formal_DDT and Actual_DDT variables.
+       (Expand_Interface_Thunk): Initialize Iface_Formal.
+       (Make_DT): Initialize Size_Comp.
+       (Make_Select_Specific_Data_Table): Initialize Decls.
+       * exp_dist.adb (Add_RACW_Primitive_Declarations_And_Bodies):
+       Also initialize more RPC_Receiver_* variables.
+       (Build_To_Any_Function): Initialize Cstr_Formal.
+       * exp_prag.adb (Expand_Pragma_Contract_Cases): Initialize Msg_Str.
+
+2017-04-28  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch6.adb (Freeze_Type_Refs): For an interface conversion
+       node between access types, freeze the designated type as well,
+       so that dispatch table pointers are created in the proper scope,
+       and not in the constructed body of the expression function.
+
+2017-04-28  Bob Duff  <duff@adacore.com>
+
+       * alloc.ads (Nodes_Initial): Go back to previous value. The large
+       value makes large compilations faster, but small compilations slower.
+
+2017-04-28  Arnaud Charlet  <charlet@adacore.com>
+
+       * sem_util.adb: minor typos in Is_Child_Or_Sibling.
+
+2017-04-28  Hristian Kirtchev  <kirtchev@adacore.com>
+
+       * erroutc.adb (Compilation_Errors): Do not consider info messages
+       as suitable warnings when warnings must be treated as errors.
+       * sem_ch7.adb (Analyze_Package_Specification): Do not consider
+       internally-generated packages when outputting completion
+       information.
+       * errout.adb (Output_Messages): Do not consider info messages as
+       suitable warnings when warnings must be treated as errors.
+       * errutil.adb (Finalize): Do not consider info messages as
+       suitable warnings when warnings must be treated as errors.
+
+
+2017-04-28  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * warnsw.ads: Minor fix for incorrect wording in comment.
+
+2017-04-28  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_res.adb (In_Instance_Code): New predicate in
+       Valid_Conversion, to determine whether a type conversion appears
+       as (or within) an actual for a formal object.  Type conversions
+       in instances are not rechecked in Valid_Conversion because
+       visibility changes between generic location andi instance may
+       lead to spurious errors, but conversions within an actual must be
+       fully checked, and they are not fully resolved when pre-analyzing
+       the actuals.
+
 2017-04-28  Hristian Kirtchev  <kirtchev@adacore.com>
 
        * exp_ch6.adb (Expand_N_Extended_Return_Statement): Use
index 380ea2cebfffe18d8debf0f506e818ca4f1e3078..c42afbb091de160e23d941d7a2faad6cb789288d 100644 (file)
@@ -100,7 +100,7 @@ package Alloc is
    Names_Initial                    : constant := 6_000;      -- Namet
    Names_Increment                  : constant := 100;
 
-   Nodes_Initial                    : constant := 5_000_000;  -- Atree
+   Nodes_Initial                    : constant := 50_000;     -- Atree
    Nodes_Increment                  : constant := 100;
    Nodes_Release_Threshold          : constant := 100_000;
 
index f71cc888b8b77de1a91eda3802acea8e6d23300e..0ff4b4e9e347beae848b347b6c22bc837f35cb8f 100644 (file)
@@ -2119,9 +2119,12 @@ package body Errout is
 
       Write_Max_Errors;
 
+      --  Even though info messages are a subclass of warnings, they must not
+      --  be treated as errors when -gnatwe is in effect.
+
       if Warning_Mode = Treat_As_Error then
          Total_Errors_Detected :=
-           Total_Errors_Detected + Warnings_Detected;
+           Total_Errors_Detected + Warnings_Detected - Info_Messages;
          Warnings_Detected := Info_Messages;
       end if;
    end Output_Messages;
index cf1095c7ae5017ca6361c81ff354bc201cec8124..b4fc53af77c02c5799515f05c7554a1f26dff7d9 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- --
@@ -242,10 +242,11 @@ package body Erroutc is
 
    function Compilation_Errors return Boolean is
    begin
-      return Total_Errors_Detected /= 0
-        or else (Warnings_Detected /= 0
-                  and then Warning_Mode = Treat_As_Error)
-        or else Warnings_Treated_As_Errors /= 0;
+      return
+        Total_Errors_Detected /= 0
+          or else (Warnings_Detected - Info_Messages /= 0
+                    and then Warning_Mode = Treat_As_Error)
+          or else Warnings_Treated_As_Errors /= 0;
    end Compilation_Errors;
 
    ------------------
index e10624fc3d771375fe9282c3ed1bf7ec4a294621..057ce768220a461e486d178ca087392a70657f3d 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1991-2016, Free Software Foundation, Inc.         --
+--          Copyright (C) 1991-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- --
@@ -586,9 +586,12 @@ package body Errutil is
          end if;
       end if;
 
+      --  Even though info messages are a subclass of warnings, they must not
+      --  be treated as errors when -gnatwe is in effect.
+
       if Warning_Mode = Treat_As_Error then
          Total_Errors_Detected :=
-           Total_Errors_Detected + Warnings_Detected;
+           Total_Errors_Detected + Warnings_Detected - Info_Messages;
          Warnings_Detected := Info_Messages;
       end if;
 
index b79a41b1099b98a62242fd30d98892b73fdc1c24..d10ae744583de795c8c0d7b73e4a1afef108f60c 100644 (file)
@@ -2956,7 +2956,7 @@ package body Exp_Ch9 is
                              Ekind (Corresponding_Spec (N)) = E_Procedure;
             --  Indicates if N is a protected procedure body
 
-            Block_Decls   : List_Id;
+            Block_Decls   : List_Id := No_List;
             Try_Write     : Entity_Id;
             Desired_Comp  : Entity_Id;
             Decl          : Node_Id;
@@ -6117,6 +6117,7 @@ package body Exp_Ch9 is
       Cond_Id    : Entity_Id;
       Entry_Body : Node_Id;
       Func_Body  : Node_Id;
+      pragma Warnings (Off, Func_Body);
 
    --  Start of processing for Expand_Entry_Barrier
 
@@ -9985,6 +9986,7 @@ package body Exp_Ch9 is
          declare
             Elmt : Elmt_Id;
             Op   : Entity_Id;
+            pragma Warnings (Off, Op);
 
          begin
             Elmt := First_Elmt (Primitive_Operations (Etype (Conc_Typ)));
index b74724ed3627f6b4105f4b5e20908043ee04263f..b26aab0af2cc0d858f6ec5b9f316a3cac0bd416e 100644 (file)
@@ -1546,8 +1546,8 @@ package body Exp_Disp is
       Formal     : Entity_Id;
       Formal_Typ : Entity_Id;
       Subp       : Entity_Id;
-      Formal_DDT : Entity_Id;
-      Actual_DDT : Entity_Id;
+      Formal_DDT : Entity_Id := Empty;  -- initialize to prevent warning
+      Actual_DDT : Entity_Id := Empty;  -- initialize to prevent warning
 
    begin
       --  This subprogram is called directly from the semantics, so we need a
@@ -1729,7 +1729,7 @@ package body Exp_Disp is
       Expr          : Node_Id;
       Formal        : Node_Id;
       Ftyp          : Entity_Id;
-      Iface_Formal  : Node_Id;
+      Iface_Formal  : Node_Id := Empty;  -- initialize to prevent warning
       New_Arg       : Node_Id;
       Offset_To_Top : Node_Id;
       Target_Formal : Entity_Id;
@@ -5274,7 +5274,7 @@ package body Exp_Disp is
             declare
                Prim_Elmt : Elmt_Id;
                Prim      : Entity_Id;
-               Size_Comp : Node_Id;
+               Size_Comp : Node_Id := Empty;
 
             begin
                Prim_Elmt := First_Elmt (Primitive_Operations (Typ));
@@ -6377,7 +6377,7 @@ package body Exp_Disp is
       Loc         : constant Source_Ptr := Sloc (Typ);
 
       Conc_Typ  : Entity_Id;
-      Decls     : List_Id;
+      Decls     : List_Id := No_List;
       Prim      : Entity_Id;
       Prim_Als  : Entity_Id;
       Prim_Elmt : Elmt_Id;
index 5af01bcd778feced55303477dea7418dd79d3f3f..70f07fc3e427c0d303e6fa5f33270c3a4f198660 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- --
@@ -1364,10 +1364,10 @@ package body Exp_Dist is
       RPC_Receiver                   : Entity_Id;
       RPC_Receiver_Statements        : List_Id;
       RPC_Receiver_Case_Alternatives : constant List_Id := New_List;
-      RPC_Receiver_Elsif_Parts       : List_Id;
-      RPC_Receiver_Request           : Entity_Id;
-      RPC_Receiver_Subp_Id           : Entity_Id;
-      RPC_Receiver_Subp_Index        : Entity_Id;
+      RPC_Receiver_Elsif_Parts       : List_Id          := No_List;
+      RPC_Receiver_Request           : Entity_Id        := Empty;
+      RPC_Receiver_Subp_Id           : Entity_Id        := Empty;
+      RPC_Receiver_Subp_Index        : Entity_Id        := Empty;
 
       Subp_Str : String_Id;
 
@@ -9434,7 +9434,7 @@ package body Exp_Dist is
             Stms   : List_Id;
 
             Expr_Formal : Entity_Id;
-            Cstr_Formal : Entity_Id;
+            Cstr_Formal : Entity_Id := Empty;  -- initialize to prevent warning
             Any         : Entity_Id;
             Result_TC   : Node_Id;
 
index 36225a92ad89cfd7dc02e74e8ff2bbcb207a3920..7ed11362fd59b1a303fd02fa5db9e7a35d37f445 100644 (file)
@@ -1000,7 +1000,7 @@ package body Exp_Prag is
       Flag          : Entity_Id;
       Flag_Decl     : Node_Id;
       If_Stmt       : Node_Id;
-      Msg_Str       : Entity_Id;
+      Msg_Str       : Entity_Id := Empty;
       Multiple_PCs  : Boolean;
       Old_Evals     : Node_Id   := Empty;
       Others_Decl   : Node_Id;
index 45a71aa6864e4a1b5c17f62c9eecc021aa6f30da..a4fd1f4363ed93ae289c03b7a6740e7614ec5c10 100644 (file)
@@ -3110,6 +3110,18 @@ package body Sem_Ch6 is
                      end if;
                   end;
                end if;
+
+            --  Freezing an access type does not freeze the designated
+            --  type, but freezing conversions between access to interfaces
+            --  requires that the interface types themselves be frozen, so
+            --  that dispatch table entities are properly created.
+            --  Unclear whether a more general rule is needed ???
+
+            elsif Nkind (Node) = N_Type_Conversion
+              and then Is_Access_Type (Etype (Node))
+              and then Is_Interface (Designated_Type (Etype (Node)))
+            then
+               Freeze_Before (N, Designated_Type (Etype (Node)));
             end if;
 
             return OK;
index 266395af6589b44a736adeaf0fe6690f0dcedd61..0b415d737cb33a628e1c81950c9c5f238db7e303 100644 (file)
@@ -1711,11 +1711,14 @@ package body Sem_Ch7 is
 
       Check_One_Tagged_Type_Or_Extension_At_Most;
 
-      --  If switch set, output information on why body required
+      --  Output relevant information as to why the package requires a body.
+      --  Do not consider generated packages as this exposes internal symbols
+      --  and leads to confusing messages.
 
       if List_Body_Required_Info
         and then In_Extended_Main_Source_Unit (Id)
         and then Unit_Requires_Body (Id)
+        and then Comes_From_Source (Id)
       then
          Unit_Requires_Body_Info (Id);
       end if;
@@ -3143,4 +3146,5 @@ package body Sem_Ch7 is
          Next_Entity (E);
       end loop;
    end Unit_Requires_Body_Info;
+
 end Sem_Ch7;
index 091a800e872bef6ac4bb40013950ce1548a96840..97f6cb674a75552357a3597d83a22db13f59c829 100644 (file)
@@ -11870,6 +11870,12 @@ package body Sem_Res is
          E   : Node_Or_Entity_Id);
       --  If Report_Errs, then calls Errout.Error_Msg_NE with its arguments
 
+      function In_Instance_Code return Boolean;
+      --  Return True if expression is within an instance but is not in one of
+      --  the actuals of the instantiation. Type conversions within an instance
+      --  are not rechecked because type visbility may lead to spurious errors,
+      --  but conversions in an actual for a formal object must be checked.
+
       function Valid_Tagged_Conversion
         (Target_Type : Entity_Id;
          Opnd_Type   : Entity_Id) return Boolean;
@@ -11899,7 +11905,7 @@ package body Sem_Res is
             --  Valid_Conversion still ensures the proper compatibility of
             --  target and operand types.
 
-           and then not In_Instance
+           and then not In_Instance_Code
          then
             Conversion_Error_N (Msg, Operand);
          end if;
@@ -11933,6 +11939,43 @@ package body Sem_Res is
          end if;
       end Conversion_Error_NE;
 
+      ----------------------
+      -- In_Instance_Code --
+      ----------------------
+
+      function In_Instance_Code return Boolean is
+         Par : Node_Id;
+      begin
+         if not In_Instance then
+            return False;
+
+         else
+            Par := Parent (N);
+            while Present (Par) loop
+
+               --  The expression is part of an actual object if it appears
+               --  in the generated object declaration in the instance.
+
+               if Nkind (Par) = N_Object_Declaration
+                  and then Present (Corresponding_Generic_Association (Par))
+               then
+                  return False;
+               else
+                  exit when Nkind (Par)
+                      in N_Statement_Other_Than_Procedure_Call
+                    or else Nkind (Par) in N_Subprogram_Call
+                    or else Nkind (Par) in N_Declaration;
+               end if;
+
+               Par := Parent (Par);
+            end loop;
+
+            --  Otherwise the expression appears within the instantiated unit.
+
+            return True;
+         end if;
+      end In_Instance_Code;
+
       ----------------------------
       -- Valid_Array_Conversion --
       ----------------------------
@@ -12271,7 +12314,7 @@ package body Sem_Res is
          --  but in fact the test is required for source code as well, since
          --  this situation can arise in source code.
 
-         elsif In_Instance or else In_Inlined_Body then
+         elsif In_Instance_Code or else In_Inlined_Body then
             return True;
 
          --  Otherwise we need the conversion check
index 92b330708595925a3afa7bdb99d00a688e0ac2f3..41f6f16a0b8841541b081e6dc1fd888487b1aa5b 100644 (file)
@@ -12353,7 +12353,7 @@ package body Sem_Util is
          return False;
 
       --  One of the packages is at a deeper level than the other. Note that
-      --  both may still come from differen hierarchies.
+      --  both may still come from different hierarchies.
 
       --        (root)           P_2
       --        /    \            :
@@ -12388,7 +12388,7 @@ package body Sem_Util is
 
       --      P_1
       --       :
-      --       X    became   P_1 P_2   or vica versa
+      --       X    became   P_1 P_2   or vice versa
       --       :
       --      P_2
 
index 4afb8b16282a2f4973a37a2ca5b145517a8ff07b..53332a7735386b9806bd831f1b2f3a1d9c3f9e49 100644 (file)
@@ -150,9 +150,9 @@ package Warnsw is
    procedure Set_GNAT_Mode_Warnings;
    --  This is called in -gnatg mode to set the warnings for gnat mode. It is
    --  also used to set the proper warning statuses for -gnatw.g. Note that
-   --  this set of warnings is disjoint from -gnatwa, it enables warnings that
-   --  are not included in -gnatwa, and it disables warnings that are included
-   --  in -gnatwa (such as Warn_On_Implementation_Units, which we clearly want
-   --  to be False for units built with -gnatg).
+   --  this set of warnings is neither a subset nor a superset of -gnatwa, it
+   --  enables warnings that are not included in -gnatwa and disables warnings
+   --  that are included in -gnatwa (such as Warn_On_Implementation_Units, that
+   --  we clearly want to be False for units built with -gnatg).
 
 end Warnsw;