Commit 90393d3c by Ed Schonberg Committed by Pierre-Marie de Rodat

[Ada] Crash on conversion in branch of if-expression

2019-12-16  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* 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.

From-SVN: r279422
parent 4a187263
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
......
......@@ -2067,7 +2067,17 @@ package body Checks is
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),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment