+2019-12-16 Ed Schonberg <schonberg@adacore.com>
+
+ * checks.adb (Apply_Float_Conversion_Check): Use node of type
+ conversion and not its parent, when inserting the declaration
+ for the temporary that hold the result of the conversion.
+ Previously the declaration was inserted above the parent of the
+ conversion, apparently as a small optimization for the
+ subsequent traversal in Insert_Actions. Unfortunately a similar
+ optimization takes place in Insert_Actions, assuming that the
+ insertion point must be above the expression that creates the
+ actions to insert. This is not correct in the presence of
+ conditional expressions (i.e. since Ada2012), where the
+ insertion must be in the list of actions attached to the current
+ alternative.
+
2019-12-16 Bob Duff <duff@adacore.com>
* sem_attr.adb (Analyze_Attribute): Use Known_RM_Size. But we
Apply_Float_Conversion_Check (Ck_Node, Target_Base);
Set_Etype (Temp, Target_Base);
- Insert_Action (Parent (Par),
+ -- Note : previously the declaration was inserted above
+ -- the parent of the conversion, apparently as a small
+ -- optimization for the subequent traversal in Insert_
+ -- Actions. Unfortunately a similar optimization takes
+ -- place in Insert_Actions, assuming that the insertion
+ -- point must be above the expression that creates actions.
+ -- This is not correct in the presence of conditional
+ -- expressions, where the insertion must be in the
+ -- list of asctions attached to the current alternative.
+
+ Insert_Action (Par,
Make_Object_Declaration (Loc,
Defining_Identifier => Temp,
Object_Definition => New_Occurrence_Of (Target_Typ, Loc),