From: Eric Botcazou Date: Wed, 5 Apr 2023 18:43:54 +0000 (+0200) Subject: ada: Fix remaining failures in Roman Numbers test X-Git-Tag: basepoints/gcc-15~8800 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5c934733eb116cf9742798bd571f147f0eb7086a;p=thirdparty%2Fgcc.git ada: Fix remaining failures in Roman Numbers test The test is inspired from the example of user-defined literals given in the Ada 2022 RM. Mixed Arabic numbers/Roman numbers computations are rejected because the second resolution pass would try to resolve Arabic numbers only as user-defined literals. gcc/ada/ * sem_res.adb (Try_User_Defined_Literal): For arithmetic operators, also accept operands whose type is covered by the resolution type. --- diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index 066072a6afec..17b74ea65d54 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -13333,12 +13333,16 @@ package body Sem_Res is -- Both operands must have the same type as the context -- (ignoring for now fixed-point and exponentiation ops). - if Has_Applicable_User_Defined_Literal (Right_Opnd (N), Typ) then + if Covers (Typ, Etype (Right_Opnd (N))) + or else Has_Applicable_User_Defined_Literal (Right_Opnd (N), Typ) + then Resolve (Left_Opnd (N), Typ); Analyze_And_Resolve (N, Typ); return True; - elsif Has_Applicable_User_Defined_Literal (Left_Opnd (N), Typ) then + elsif Covers (Typ, Etype (Left_Opnd (N))) + or else Has_Applicable_User_Defined_Literal (Left_Opnd (N), Typ) + then Resolve (Right_Opnd (N), Typ); Analyze_And_Resolve (N, Typ); return True;