===================================================================
@@ -1108,8 +1108,12 @@
or else Nkind (P) in N_Membership_Test
or else Nkind (P) in N_Op_Compare
- -- We may also be a range operand in a membership test
+ -- This is also true for an alternative in a case expression
+ or else Nkind (P) = N_Case_Expression_Alternative
+
+ -- This is also true for a range operand in a membership test
+
or else (Nkind (P) = N_Range
and then Nkind (Parent (P)) in N_Membership_Test)
then
@@ -6268,9 +6272,6 @@
when N_If_Expression | N_Case_Expression =>
return Is_Signed_Integer_Type (Etype (N));
- when N_Case_Expression_Alternative =>
- return Is_Signed_Integer_Type (Etype (Parent (N)));
-
when others =>
return False;
end case;
===================================================================
@@ -3877,8 +3877,8 @@
end if;
-- Right operand is a subtype name and the subtype has a predicate. We
- -- have to make sure predicate is checked, and for that we need to use
- -- the standard N_In circuitry with appropriate types.
+ -- have to make sure the predicate is checked, and for that we need to
+ -- use the standard N_In circuitry with appropriate types.
else
pragma Assert (Present (Predicate_Function (Etype (Rop))));
@@ -3921,7 +3921,7 @@
-- Bnn
-- end
- -- A bit gruesome, but here goes.
+ -- A bit gruesome, but there doesn't seem to be a simpler way
declare
Blk : constant Node_Id := Make_Bignum_Block (Loc);
@@ -3937,10 +3937,8 @@
Nin :=
Make_In (Loc,
- Left_Opnd =>
- Convert_To (Base_Type (Etype (Rop)),
- New_Occurrence_Of (Lnn, Loc)),
- Right_Opnd => New_Occurrence_Of (Etype (Rop), Loc));
+ Left_Opnd => Convert_To (TB, New_Occurrence_Of (Lnn, Loc)),
+ Right_Opnd => New_Occurrence_Of (T, Loc));
Set_No_Minimize_Eliminate (Nin);
-- Now decorate the block