From: Ronan Desplanques Date: Mon, 2 Jan 2023 15:38:36 +0000 (+0100) Subject: ada: Fix Unchecked_Conversion in edge case X-Git-Tag: basepoints/gcc-15~9317 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bc60b3c350885cf60547f9e7002248b9bbb81e3d;p=thirdparty%2Fgcc.git ada: Fix Unchecked_Conversion in edge case Before this patch, Set_Can_Use_Internal_Rep was called on access to subprogram subtypes when instantiating Unchecked_Conversion from System.Address to an access to subprogram subtype (or the reverse). This was incorrect and caused an assertion failure. This patch fixes that by modifying the Can_Use_Internal_Rep attribute of the base type of the subtype instead. gcc/ada/ * sem_ch13.adb (Validate_Unchecked_Conversion): Fix behavior on System.Address to access to subprogram subtype conversion. --- diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index 0d311ca80b47..82345eca09e2 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -17742,12 +17742,12 @@ package body Sem_Ch13 is and then Is_Descendant_Of_Address (Source) and then In_Same_Source_Unit (Target, N) then - Set_Can_Use_Internal_Rep (Target, False); + Set_Can_Use_Internal_Rep (Base_Type (Target), False); elsif Is_Access_Subprogram_Type (Source) and then Is_Descendant_Of_Address (Target) and then In_Same_Source_Unit (Source, N) then - Set_Can_Use_Internal_Rep (Source, False); + Set_Can_Use_Internal_Rep (Base_Type (Source), False); end if; -- Generate N_Validate_Unchecked_Conversion node for back end in case