diff mbox series

[Ada] Entry family selector not recognised as entity usage

Message ID 20170925090714.GA76613@adacore.com
State New
Headers show
Series [Ada] Entry family selector not recognised as entity usage | expand

Commit Message

Pierre-Marie de Rodat Sept. 25, 2017, 9:07 a.m. UTC
This patch corrects an issue whereby index actuals in calls to entry families
were not being properly flagged as referenced leading to spurious warnings
when compiling with -gnatwu.

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

gcc/ada/

2017-09-25  Justin Squirek  <squirek@adacore.com>

	* sem_res.adb (Resolve_Entry): Generate reference for index entities.

gcc/testsuite/

2017-09-25  Justin Squirek  <squirek@adacore.com>

	* gnat.dg/entry_family.adb: New testcase
diff mbox series

Patch

Index: sem_res.adb
===================================================================
--- sem_res.adb	(revision 253134)
+++ sem_res.adb	(working copy)
@@ -7474,6 +7474,15 @@ 
          Index := First (Expressions (Entry_Name));
          Resolve (Index, Entry_Index_Type (Nam));
 
+         --  Generate a reference for the index entity when the index is not a
+         --  literal.
+
+         if Nkind (Index) in N_Has_Entity
+           and then Nkind (Entity (Index)) in N_Entity
+         then
+            Generate_Reference (Entity (Index), Nam, ' ');
+         end if;
+
          --  Up to this point the expression could have been the actual in a
          --  simple entry call, and be given by a named association.
 
Index: ../testsuite/gnat.dg/entry_family.adb
===================================================================
--- ../testsuite/gnat.dg/entry_family.adb	(revision 0)
+++ ../testsuite/gnat.dg/entry_family.adb	(revision 0)
@@ -0,0 +1,28 @@ 
+--  { dg-do compile }
+--  { dg-options "-gnatwu" }
+
+with Ada.Numerics.Discrete_Random; use Ada.Numerics;
+
+procedure Entry_Family is
+   protected Family is
+      entry Call (Boolean);
+   end Family;
+
+   protected body Family is
+      entry Call (for P in Boolean) when True is
+      begin
+         null;
+      end Call;
+
+   end Family;
+
+   package Random_Boolean is new Discrete_Random (Result_Subtype => Boolean);
+   use Random_Boolean;
+
+   Boolean_Generator : Generator;
+
+   B : constant Boolean := Random (Boolean_Generator);
+
+begin
+   Family.Call (B);
+end Entry_Family;