From: Robert Dewar Date: Mon, 4 Aug 2008 12:51:00 +0000 (+0200) Subject: 2008-08-04 Robert Dewar X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9fa33291c780a0d1d3bef0c0aa4650fa6829ade3;p=gcc.git 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 --- 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