aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteve Baird <baird@adacore.com>2025-01-10 13:15:18 -0800
committerEric Botcazou <ebotcazou@adacore.com>2025-06-05 15:29:50 +0200
commit29447fb66f7cf4a515cbbcc812008092d519bc9c (patch)
tree5349992c732ccf0d37a275486db384586bdc0935 /gcc
parenta52223c5b2ba677468b5fabc010492998e4dea3a (diff)
downloadgcc-29447fb66f7cf4a515cbbcc812008092d519bc9c.zip
gcc-29447fb66f7cf4a515cbbcc812008092d519bc9c.tar.gz
gcc-29447fb66f7cf4a515cbbcc812008092d519bc9c.tar.bz2
ada: Avoid calling Resolve with Stand.Any_Fixed as the expected type
When we call Resolve for an expression, we pass in the expected type for that expression. In the absence of semantic errors, that expected type should never be any of the "Any_xxx" types declared in stand.ads (e.g., Any_Array, Any_Numeric, Any_Real). In particular, it should never be Any_Fixed. Fix a case in which this rule was being violated. gcc/ada/ChangeLog: * sem_res.adb (Set_Mixed_Mode_Operand): If we are about to call Resolve passing in Any_Fixed as the expected type, then instead pass in the fixed point type of the other operand (i.e., B_Typ).
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/sem_res.adb2
1 files changed, 2 insertions, 0 deletions
diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index b73b947..0df6c27 100644
--- a/gcc/ada/sem_res.adb
+++ b/gcc/ada/sem_res.adb
@@ -6101,6 +6101,8 @@ package body Sem_Res is
elsif Is_Fixed_Point_Type (It.Typ) then
if Analyzed (N) then
Error_Msg_N ("ambiguous operand in fixed operation", N);
+ elsif It.Typ = Any_Fixed then
+ Resolve (N, B_Typ);
else
Resolve (N, It.Typ);
end if;