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
This commit is contained in:
parent
7d1286f61e
commit
1a9ee22281
|
@ -1,3 +1,8 @@
|
||||||
|
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)
|
||||||
/****************/
|
/****************/
|
||||||
|
|
||||||
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));
|
||||||
|
|
Loading…
Reference in New Issue