@@ -3692,8 +3692,16 @@ package body Sem_Ch8 is
-- and mark any use_package_clauses that affect the visibility of the
-- implicit generic actual.
+ -- Also, we may be looking at an internal renaming of a user-defined
+ -- subprogram created for a generic formal subprogram association,
+ -- which will also have to be marked here. This can occur when the
+ -- corresponding formal subprogram contains references to other generic
+ -- formals.
+
if Is_Generic_Actual_Subprogram (New_S)
- and then (Is_Intrinsic_Subprogram (New_S) or else From_Default (N))
+ and then (Is_Intrinsic_Subprogram (New_S)
+ or else From_Default (N)
+ or else Nkind (N) = N_Subprogram_Renaming_Declaration)
then
Mark_Use_Clauses (New_S);
new file mode 100644
@@ -0,0 +1,38 @@
+-- { dg-do compile }
+-- { dg-options "-gnatwa" }
+
+procedure Warn16 is
+
+ package Define is
+ type Key_Type is record
+ Value : Integer := 0;
+ end record;
+
+ function "=" (Left : in Key_Type;
+ Right : in Key_Type)
+ return Boolean;
+ end;
+ package body Define is
+ function "=" (Left : in Key_Type;
+ Right : in Key_Type)
+ return Boolean is
+ begin
+ return Left.Value = Right.Value;
+ end;
+ end;
+
+ generic
+ type Key_Type is private;
+ with function "=" (Left : in Key_Type;
+ Right : in Key_Type)
+ return Boolean;
+ package Oper is end;
+
+ use type Define.Key_Type; -- !!!
+
+ package Inst is new Oper (Key_Type => Define.Key_Type,
+ "=" => "=");
+ pragma Unreferenced (Inst);
+begin
+ null;
+end;