[Ada] Deep copy operands of membership operations for unnesting
authorEd Schonberg <schonberg@adacore.com>
Mon, 16 Jul 2018 14:12:13 +0000 (14:12 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 16 Jul 2018 14:12:13 +0000 (14:12 +0000)
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

gcc/ada/ChangeLog
gcc/ada/exp_ch4.adb

index 8b79b00a0e83755ada7ee4b364ff3bf02ce012d7..22fc57b87520e64d8428862e468d34c63e76606f 100644 (file)
@@ -1,3 +1,11 @@
+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
index a98ffb3df737e4a41fdce0671573aca2e2453c8b..8dad953025bb33bb92cc388df5400b335bc36db4 100644 (file)
@@ -12248,7 +12248,7 @@ package body Exp_Ch4 is
 
       function Make_Cond (Alt : Node_Id) return Node_Id is
          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);
 
       begin