[Ada] Fix strange warning when using Ada.Iterator_Interface

Message ID 20181009150923.GA123320@adacore.com
State New
Headers show
Series
  • [Ada] Fix strange warning when using Ada.Iterator_Interface
Related show

Commit Message

Pierre-Marie de Rodat Oct. 9, 2018, 3:09 p.m.
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.

Tested on x86_64-pc-linux-gnu, committed on trunk

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.

Patch

--- gcc/ada/exp_disp.adb
+++ gcc/ada/exp_disp.adb
@@ -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),

--- /dev/null
new file mode 100644
+++ gcc/testsuite/gnat.dg/warn17.adb
@@ -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;