If the prefix is a single protected object and the selector is a discriminant
or an entry family, this is a non-overloaded candidate interpretation, and
possible primitive operations of the type must not be examined.
The following must compile and execute quietly in Ada 2005 mode:
---
with FooBar;
procedure Interface_Entry_Family is
I : FooBar.Index := 1;
begin
FooBar.Bar.E(I)(1337);
end Interface_Entry_Family;
--
package FooBar is
type Foo is protected interface;
procedure P(Self : in out Foo) is abstract;
type Index is range 1..1;
protected Bar is
new Foo with -- remove this line, and it will compile.
procedure P;
entry E(Index)(Baz : Integer);
end Bar;
end FooBar;
---
package body FooBar is
protected body Bar is
procedure P is
begin
null;
end P;
entry E(for I in Index)(Baz : Integer) when True is
begin
null;
end E;
end Bar;
end FooBar;
---
Tested on x86_64-pc-linux-gnu, committed on trunk
2011-09-27 Ed Schonberg <[email protected]>
* sem_ch4.adb (Analyze_Selected_Component): If the prefix is a
single protected object and the selector is a discriminant or an
entry family, this is a non-overloaded candidate interpretation,
and possible primitive operations of the type must not be
examined.
Index: sem_ch4.adb
===================================================================
--- sem_ch4.adb (revision 179247)
+++ sem_ch4.adb (working copy)
@@ -4125,6 +4125,11 @@
Set_Entity_With_Style_Check (Sel, Comp);
Generate_Reference (Comp, Sel);
+ -- The selector is not overloadable, so we have a candidate
+ -- interpretation.
+
+ Has_Candidate := True;
+
else
goto Next_Comp;
end if;