aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sem_res.adb
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2023-04-05 20:43:54 +0200
committerMarc Poulhiès <poulhies@adacore.com>2023-05-29 10:23:20 +0200
commit5c934733eb116cf9742798bd571f147f0eb7086a (patch)
tree04a34d6173a219f534732464bf3a9ea55a0ddd92 /gcc/ada/sem_res.adb
parent5ad28c8ff6a78082eaa836c2d475ffb6b0b6f08b (diff)
downloadgcc-5c934733eb116cf9742798bd571f147f0eb7086a.zip
gcc-5c934733eb116cf9742798bd571f147f0eb7086a.tar.gz
gcc-5c934733eb116cf9742798bd571f147f0eb7086a.tar.bz2
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.
Diffstat (limited to 'gcc/ada/sem_res.adb')
-rw-r--r--gcc/ada/sem_res.adb8
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index 066072a..17b74ea 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;