@@ -13891,7 +13891,7 @@ package body Exp_Ch4 is
Selector_Name =>
New_Occurrence_Of (First_Tag_Component (Left_Type), Loc));
- if Is_Class_Wide_Type (Right_Type) then
+ if Is_Class_Wide_Type (Right_Type) or else Is_Interface (Left_Type) then
-- No need to issue a run-time check if we statically know that the
-- result of this membership test is always true. For example,
@@ -9032,7 +9032,6 @@ package body Sem_Res is
elsif Ada_Version >= Ada_2005
and then Is_Class_Wide_Type (Etype (L))
and then Is_Interface (Etype (L))
- and then Is_Class_Wide_Type (Etype (R))
and then not Is_Interface (Etype (R))
then
return;
new file mode 100644
@@ -0,0 +1,16 @@
+-- { dg-do compile }
+
+procedure Interface7 is
+ type I_Type is interface;
+
+ type A1_Type is tagged null record;
+ type A2_Type is new A1_Type and I_Type with null record;
+
+ procedure Test (X : I_Type'Class) is
+ begin
+ if X in A2_Type then -- Test
+ null;
+ end if;
+ end Test;
+
+begin null; end;