From f1231d9a0baab25e0a07b0d6146b91e59ecfadb8 Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Tue, 14 Dec 2021 15:44:16 +0100 Subject: [PATCH] [Ada] Fix check for looking for user defined literals Recall that Has_Possible_Literal_Aspects only comes in if a given node does not have any visible interpretation. If one operand is a literal we assume that there may be a user-defined literal defined for some type to be determined during the downward pass of resolution, but that depends on the existence of some user-defined function or operator that can take that literal as an actual. If analysis did not find such, the call is illegal. I think that the following must be added to Operator_Check to recover the proper error. Note that this breaks current partial implementation of user-defined literals. gcc/ada/ * sem_ch4.adb (Operator_Check): Fix condition. --- gcc/ada/sem_ch4.adb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 68839b31345..915a7b48eca 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -7260,7 +7260,9 @@ package body Sem_Ch4 is then return; - elsif Has_Possible_Literal_Aspects (N) then + elsif Present (Entity (N)) + and then Has_Possible_Literal_Aspects (N) + then return; -- If we have a logical operator, one of whose operands is