[COMMITTED] ada: Restore parent link for both lists and nodes in class-wide condition

Message ID 20230529082908.2409640-1-poulhies@adacore.com
State Committed
Commit 5f691c62b5fee61f72352dac324c3fef57cc8511
Headers
Series [COMMITTED] ada: Restore parent link for both lists and nodes in class-wide condition |

Commit Message

Marc Poulhiès May 29, 2023, 8:29 a.m. UTC
  From: Piotr Trojanek <trojanek@adacore.com>

When preanalysing class-wide conditions, we restore "Function (Object)"
to its original "Object.Function" notation. This requires the Parent
links to be fixed. We did it for nodes; now we do it for lists as well.

This patch is enough to fix assertion failure in CCG and to make the
tree well-connected. Perhaps there is a more elegant solution, but that
remains to be investigated.

gcc/ada/

	* contracts.adb (Fix_Parent): Fir part both for lists and nodes.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/contracts.adb | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
  

Patch

diff --git a/gcc/ada/contracts.adb b/gcc/ada/contracts.adb
index 65f341abc8f..15b65ee4c06 100644
--- a/gcc/ada/contracts.adb
+++ b/gcc/ada/contracts.adb
@@ -4936,9 +4936,11 @@  package body Contracts is
 
             begin
                if Par /= Parent_Node then
-                  pragma Assert (not Is_List_Member (Node)
-                                   or else Nkind (Par) = N_Function_Call);
-                  Set_Parent (Node, Parent_Node);
+                  if Is_List_Member (Node) then
+                     Set_List_Parent (List_Containing (Node), Parent_Node);
+                  else
+                     Set_Parent (Node, Parent_Node);
+                  end if;
                end if;
 
                return OK;