Commit 1a9ee222 by Olivier Hainque Committed by Arnaud Charlet

trans.c (gnat_to_gnu, [...]): Elaborate the expression as part of the same stmt…

trans.c (gnat_to_gnu, [...]): Elaborate the expression as part of the same stmt group as the actions.

2015-01-07  Olivier Hainque  <hainque@adacore.com>
                                             
	* gcc-interface/trans.c (gnat_to_gnu, <N_Expression_With_Action>):      
	Elaborate the expression as part of the same stmt group as the actions.

From-SVN: r219286
parent 7d1286f6
2015-01-07 Olivier Hainque <hainque@adacore.com>
* gcc-interface/trans.c (gnat_to_gnu, <N_Expression_With_Action>):
Elaborate the expression as part of the same stmt group as the actions.
2015-01-07 Robert Dewar <dewar@adacore.com> 2015-01-07 Robert Dewar <dewar@adacore.com>
* sem_ch3.adb: Minor error message change. * sem_ch3.adb: Minor error message change.
......
...@@ -7128,13 +7128,22 @@ gnat_to_gnu (Node_Id gnat_node) ...@@ -7128,13 +7128,22 @@ gnat_to_gnu (Node_Id gnat_node)
/****************/ /****************/
case N_Expression_With_Actions: case N_Expression_With_Actions:
/* This construct doesn't define a scope so we don't push a binding level /* This construct doesn't define a scope so we don't push a binding
around the statement list; but we wrap it in a SAVE_EXPR to protect it level around the statement list, but we wrap it in a SAVE_EXPR to
from unsharing. */ protect it from unsharing. Elaborate the expression as part of the
gnu_result = build_stmt_group (Actions (gnat_node), false); same statement group as the actions so that the type declaration
gets inserted there as well. This ensures that the type elaboration
code is issued past the actions computing values on which it might
depend. */
start_stmt_group ();
add_stmt_list (Actions (gnat_node));
gnu_expr = gnat_to_gnu (Expression (gnat_node));
gnu_result = end_stmt_group ();
gnu_result = build1 (SAVE_EXPR, void_type_node, gnu_result); gnu_result = build1 (SAVE_EXPR, void_type_node, gnu_result);
TREE_SIDE_EFFECTS (gnu_result) = 1; TREE_SIDE_EFFECTS (gnu_result) = 1;
gnu_expr = gnat_to_gnu (Expression (gnat_node));
gnu_result gnu_result
= build_compound_expr (TREE_TYPE (gnu_expr), gnu_result, gnu_expr); = build_compound_expr (TREE_TYPE (gnu_expr), gnu_result, gnu_expr);
gnu_result_type = get_unpadded_type (Etype (gnat_node)); gnu_result_type = get_unpadded_type (Etype (gnat_node));
......
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