From 9fa33291c780a0d1d3bef0c0aa4650fa6829ade3 Mon Sep 17 00:00:00 2001 From: Robert Dewar Date: Mon, 4 Aug 2008 14:51:00 +0200 Subject: [PATCH] 2008-08-04 Robert Dewar * sem_res.adb: (Valid_Conversion): Catch case of designated types having different sizes, even though they statically match. From-SVN: r138615 --- gcc/ada/sem_res.adb | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index d59c30bc0f9..4e0e0dedfcd 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -9519,7 +9519,27 @@ package body Sem_Res is (not Is_Constrained (Opnd) or else not Is_Constrained (Target))) then - return True; + -- Special case, if Value_Size has been used to make the + -- sizes different, the conversion is not allowed even + -- though the subtypes statically match. + + if Known_Static_RM_Size (Target) + and then Known_Static_RM_Size (Opnd) + and then RM_Size (Target) /= RM_Size (Opnd) + then + Error_Msg_NE + ("target designated subtype not compatible with }", + N, Opnd); + Error_Msg_NE + ("\because sizes of the two designated subtypes differ", + N, Opnd); + return False; + + -- Normal case where conversion is allowed + + else + return True; + end if; else Error_Msg_NE -- 2.30.2