diff options
author | Ronan Desplanques <desplanques@adacore.com> | 2023-01-02 16:38:36 +0100 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2023-05-15 11:36:40 +0200 |
commit | bc60b3c350885cf60547f9e7002248b9bbb81e3d (patch) | |
tree | 0441ac46bd9b71389cfd9d778122698f56781b43 /gcc | |
parent | f04dae641112509bfd4ec8bd76774ebedca28d1f (diff) | |
download | gcc-bc60b3c350885cf60547f9e7002248b9bbb81e3d.zip gcc-bc60b3c350885cf60547f9e7002248b9bbb81e3d.tar.gz gcc-bc60b3c350885cf60547f9e7002248b9bbb81e3d.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/sem_ch13.adb | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index 0d311ca..82345ec 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 |