aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorRonan Desplanques <desplanques@adacore.com>2023-01-02 16:38:36 +0100
committerMarc Poulhiès <poulhies@adacore.com>2023-05-15 11:36:40 +0200
commitbc60b3c350885cf60547f9e7002248b9bbb81e3d (patch)
tree0441ac46bd9b71389cfd9d778122698f56781b43 /gcc/ada
parentf04dae641112509bfd4ec8bd76774ebedca28d1f (diff)
downloadgcc-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/ada')
-rw-r--r--gcc/ada/sem_ch13.adb4
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