[COMMITTED] ada: Restore parent link for both lists and nodes in class-wide condition
Marc Poulhiès
poulhies@adacore.com
Mon May 29 08:29:08 GMT 2023
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(-)
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;
--
2.40.0
More information about the Gcc-patches
mailing list