[gcc r13-7871] ada: Fix remaining failures in Roman Numbers test

Eric Botcazou ebotcazou@gcc.gnu.org
Wed Sep 27 08:25:32 GMT 2023


https://gcc.gnu.org/g:d051e7e75d3ad36ec62b9f53c856a7fb6dbe4f28

commit r13-7871-gd051e7e75d3ad36ec62b9f53c856a7fb6dbe4f28
Author: Eric Botcazou <ebotcazou@adacore.com>
Date:   Wed Apr 5 20:43:54 2023 +0200

    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:
---
 gcc/ada/sem_res.adb | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index b819deb8c39..615d9d81a84 100644
--- a/gcc/ada/sem_res.adb
+++ b/gcc/ada/sem_res.adb
@@ -13219,12 +13219,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;


More information about the Gcc-cvs mailing list