From 6a5eb72be832d308be93ea9f6a07087aa49024e9 Mon Sep 17 00:00:00 2001 From: Steve Baird Date: Wed, 15 Nov 2023 13:13:04 -0800 Subject: [PATCH] ada: Too-strict conformance checking for formal discriminated type The discriminant subtype conformance check for an actual parameter corresponding to a generic formal discriminated type was too strict and could incorrectly reject legal instantiations. gcc/ada/ * sem_ch12.adb (Validate_Discriminated_Formal_Type): Replace Entity_Id equality test with a call to Subtypes_Match. Distinct subtypes which are statically matching should pass this test. (Check_Discriminated_Formal): Replace Entity_Id equality test with a call to Subtypes_Statically_Match (preceded by a check that the preconditions for the call are satisfied). --- gcc/ada/sem_ch12.adb | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index 7c645c490aea..ea85e88d7536 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -14001,9 +14001,10 @@ package body Sem_Ch12 is and then (Ekind (Base_Type (Etype (Actual_Discr)))) = E_Anonymous_Access_Type and then - Get_Instance_Of - (Designated_Type (Base_Type (Formal_Subt))) = - Designated_Type (Base_Type (Etype (Actual_Discr))) + Subtypes_Match + (Get_Instance_Of + (Designated_Type (Base_Type (Formal_Subt))), + Designated_Type (Base_Type (Etype (Actual_Discr)))) then null; @@ -17322,8 +17323,14 @@ package body Sem_Ch12 is and then (Ekind (Base_Type (Etype (Actual_Discr)))) = E_Anonymous_Access_Type and then - Designated_Type (Base_Type (Formal_Subt)) = - Designated_Type (Base_Type (Etype (Actual_Discr))) + Base_Type + (Designated_Type (Base_Type (Formal_Subt))) = + Base_Type + (Designated_Type (Base_Type (Etype (Actual_Discr)))) + and then + Subtypes_Statically_Match + (Designated_Type (Base_Type (Formal_Subt)), + Designated_Type (Base_Type (Etype (Actual_Discr)))) then null; -- 2.47.2