]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Avoid calling Resolve with Stand.Any_Fixed as the expected type
authorSteve Baird <baird@adacore.com>
Fri, 10 Jan 2025 21:15:18 +0000 (13:15 -0800)
committerMarc Poulhiès <dkm@gcc.gnu.org>
Thu, 5 Jun 2025 08:18:33 +0000 (10:18 +0200)
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).

gcc/ada/sem_res.adb

index b73b947c9a2584579219218e17354b822702d6e0..0df6c27c30d74a2f589421f72f670aa54b0a9999 100644 (file)
@@ -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;