@@ -5283,9 +5283,19 @@ package body Sem_Res is
elsif Etype (N) = T
and then B_Typ /= Universal_Fixed
then
- -- Not a mixed-mode operation, resolve with context
- Resolve (N, B_Typ);
+ -- if the operand is part of a fixed multiplication operation,
+ -- a conversion will be applied to each operand, so resolve it
+ -- with its own type.
+
+ if Nkind_In (Parent (N), N_Op_Multiply, N_Op_Divide) then
+ Resolve (N);
+
+ else
+ -- Not a mixed-mode operation, resolve with context
+
+ Resolve (N, B_Typ);
+ end if;
elsif Etype (N) = Any_Fixed then
new file mode 100644
@@ -0,0 +1,14 @@
+-- { dg-do compile }
+
+procedure Fixedpnt4 is
+ type T is delta 2.0/5.0 range -10.0 .. 10.0 with Small => 2.0/5.0;
+ type T2 is delta 1.0/25.0 range -10.0 .. 10.0 with Small => 1.0/25.0;
+
+ X : T := 1.0;
+ Y : T2;
+begin
+ Y := X / X;
+ Y := X / (X + X);
+ Y := X / (X + X + 1.0);
+ Y := (X + X) * (X + X);
+end;