]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Fix remaining failures in Roman Numbers test
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 5 Apr 2023 18:43:54 +0000 (20:43 +0200)
committerMarc Poulhiès <poulhies@adacore.com>
Mon, 29 May 2023 08:23:20 +0000 (10:23 +0200)
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.

gcc/ada/sem_res.adb

index 066072a6afec1778c51e2326ea9ae883ffccb9ff..17b74ea65d54f06cb1c080a8bc74ccfb5d84d247 100644 (file)
@@ -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;