Commit afe9c539 by Ed Schonberg Committed by Pierre-Marie de Rodat

[Ada] Deep copy operands of membership operations for unnesting

2018-07-16  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* exp_ch4.adb (Expand_Set_Membership): Use New_Copy_Tree to perform a
	deep copy of the left operand when building each conjuct of the
	expanded membership operation, to avoid sharing nodes between them.
	This sharing interferes with the unnesting machinery and is generally
	undesirable.

From-SVN: r262727
parent 4dd2ed14
2018-07-16 Ed Schonberg <schonberg@adacore.com> 2018-07-16 Ed Schonberg <schonberg@adacore.com>
* exp_ch4.adb (Expand_Set_Membership): Use New_Copy_Tree to perform a
deep copy of the left operand when building each conjuct of the
expanded membership operation, to avoid sharing nodes between them.
This sharing interferes with the unnesting machinery and is generally
undesirable.
2018-07-16 Ed Schonberg <schonberg@adacore.com>
* exp_unst.adb (Visit_Node): Handle 'Address references that are * exp_unst.adb (Visit_Node): Handle 'Address references that are
calls. calls.
......
...@@ -12248,7 +12248,7 @@ package body Exp_Ch4 is ...@@ -12248,7 +12248,7 @@ package body Exp_Ch4 is
function Make_Cond (Alt : Node_Id) return Node_Id is function Make_Cond (Alt : Node_Id) return Node_Id is
Cond : Node_Id; Cond : Node_Id;
L : constant Node_Id := New_Copy (Lop); L : constant Node_Id := New_Copy_Tree (Lop);
R : constant Node_Id := Relocate_Node (Alt); R : constant Node_Id := Relocate_Node (Alt);
begin begin
......
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