[COMMITTED] ada: Fix remaining failures in Roman Numbers test
Commit Message
From: Eric Botcazou <ebotcazou@adacore.com>
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.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/sem_res.adb | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
@@ -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;