[Ada] Fix strange warning when using Ada.Iterator_Interface
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 9 Oct 2018 15:06:21 +0000 (15:06 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 9 Oct 2018 15:06:21 +0000 (15:06 +0000)
The back-end was recently changed to issue more -Wuninitialized warnings
on Out parameters and this has caught a case related to
Ada.Iterator_Interface.: This patchlet simply kills this uninteresting
warning.

2018-10-09  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_disp.adb (Make_Disp_Asynchronous_Select_Spec): Set
Warnings_Off on the B out parameter.

gcc/testsuite/

* gnat.dg/warn17.adb: New testcase.

From-SVN: r264977

gcc/ada/ChangeLog
gcc/ada/exp_disp.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/warn17.adb [new file with mode: 0644]

index 072e19a8b119e24d9cffeb7ecc13e806b8fcaaa6..a547602240d5780626668ef4be6c0bae7350f0fa 100644 (file)
@@ -1,3 +1,8 @@
+2018-10-09  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * exp_disp.adb (Make_Disp_Asynchronous_Select_Spec): Set
+       Warnings_Off on the B out parameter.
+
 2018-10-09  Eric Botcazou  <ebotcazou@adacore.com>
 
        * einfo.ads: Small comment fix.
index 2169b67419a2aed5e9916b67ed9f1c1394abcc35..79c08978071b446db09099f693eb13b2dee8e2ea 100644 (file)
@@ -2487,9 +2487,10 @@ package body Exp_Disp is
      (Typ : Entity_Id) return Node_Id
    is
       Loc    : constant Source_Ptr := Sloc (Typ);
-      Def_Id : constant Node_Id    :=
+      Def_Id : constant Entity_Id :=
                  Make_Defining_Identifier (Loc,
                    Name_uDisp_Asynchronous_Select);
+      B_Id   : constant Entity_Id  := Make_Defining_Identifier (Loc, Name_uB);
       Params : constant List_Id    := New_List;
 
    begin
@@ -2501,6 +2502,9 @@ package body Exp_Disp is
       --  B : out Dummy_Communication_Block;  --  Communication block dummy
       --  F : out Boolean;                    --  Status flag
 
+      --  The B parameter may be left uninitialized
+      Set_Warnings_Off (B_Id);
+
       Append_List_To (Params, New_List (
 
         Make_Parameter_Specification (Loc,
@@ -2518,7 +2522,7 @@ package body Exp_Disp is
           Parameter_Type      => New_Occurrence_Of (RTE (RE_Address), Loc)),
 
         Make_Parameter_Specification (Loc,
-          Defining_Identifier => Make_Defining_Identifier (Loc, Name_uB),
+          Defining_Identifier => B_Id,
           Parameter_Type      =>
             New_Occurrence_Of (RTE (RE_Dummy_Communication_Block), Loc),
           Out_Present         => True),
index 87368c7301da7c1ecd1102911b871e09374718de..8196ce74c5c315e8039e85e9091068b71cd83e78 100644 (file)
@@ -1,3 +1,7 @@
+2018-10-09  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/warn17.adb: New testcase.
+
 2018-10-09  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gnat.dg/inline14.adb, gnat.dg/inline14_pkg.adb,
diff --git a/gcc/testsuite/gnat.dg/warn17.adb b/gcc/testsuite/gnat.dg/warn17.adb
new file mode 100644 (file)
index 0000000..6d48e54
--- /dev/null
@@ -0,0 +1,22 @@
+--  { dg-do compile }
+--  { dg-options "-Wall" }
+
+with Ada.Iterator_Interfaces;
+
+procedure Warn17 is
+
+   type Cursor is null record;
+
+   function Has_Element (Position : Cursor) return Boolean;
+
+   function Has_Element (Position : Cursor) return Boolean is (True);
+
+   package My_Iterator is
+     new Ada.Iterator_Interfaces (Cursor, Has_Element);
+
+   type Iterator is abstract new My_Iterator.Forward_Iterator with null record;
+
+   pragma Unreferenced (Iterator);
+begin
+   null;
+end Warn17;