[gcc r16-1384] ada: VAST found bug: Itypes with Parent
Marc Poulhies
dkm@gcc.gnu.org
Tue Jun 10 07:36:15 GMT 2025
https://gcc.gnu.org/g:e564160f91b3ac49bf006873f00bb94104ea521f
commit r16-1384-ge564160f91b3ac49bf006873f00bb94104ea521f
Author: Bob Duff <duff@adacore.com>
Date: Thu Mar 27 06:14:33 2025 -0400
ada: VAST found bug: Itypes with Parent
Fix the comment about Itypes, so the Parent field is no longer required.
Change VAST to no longer require it. Remove Check_Itype_Parents
from Check_Enum; it can no longer fail, so there's no point in
making it switchable.
gcc/ada/ChangeLog:
* einfo.ads (Associated_Node_For_Itype): Document that
Parent field may be empty.
* vast.adb: Allow empty Parent in Itypes.
Diff:
---
gcc/ada/einfo.ads | 12 +++++++-----
gcc/ada/vast.adb | 14 +++++++-------
2 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads
index e529a64e0f67..495a1932109a 100644
--- a/gcc/ada/einfo.ads
+++ b/gcc/ada/einfo.ads
@@ -463,11 +463,13 @@ package Einfo is
-- For an access_to_protected_subprogram parameter it is the declaration
-- of the corresponding formal parameter.
---
--- Itypes have no explicit declaration, and therefore are not attached to
--- the tree: their Parent field is always empty. The Associated_Node_For_
--- Itype is the only way to determine the construct that leads to the
--- creation of a given itype entity.
+
+-- Itypes need not have an explicit declaration, in which case they are
+-- not attached to the tree through the Parent field, which is empty. In
+-- other cases, they have one and are attached to the tree through the
+-- Parent field as usual. Associated_Node_For_Itype should be used to
+-- determine the construct that leads to the creation of a given itype
+-- entity.
-- Associated_Storage_Pool [root type only]
-- Defined in simple and general access type entities. References the
diff --git a/gcc/ada/vast.adb b/gcc/ada/vast.adb
index a48707b2ce5c..acb48b6254db 100644
--- a/gcc/ada/vast.adb
+++ b/gcc/ada/vast.adb
@@ -50,12 +50,11 @@ package body VAST is
-- False means disabled checks are silent; True means we print a message
-- (but still don't raise VAST_Failure).
- type Check_Enum is (Check_Other, Check_Itype_Parents, Check_Error_Nodes);
+ type Check_Enum is (Check_Other, Check_Error_Nodes);
Enabled_Checks : constant array (Check_Enum) of Boolean :=
--- (Check_Other => True, others => False);
- (others => True);
--- (Check_Itype_Parents => False, -- this one fails in bootstrap!
--- others => True);
+ (Check_Other => True,
+-- others => False);
+ others => True);
-- Passing checks are Check_Other, which should always be enabled.
-- Currently-failing checks are different enumerals in Check_Enum,
-- which can be disabled individually until we fix the bugs, or enabled
@@ -152,9 +151,10 @@ package body VAST is
if Nkind (N) = N_Compilation_Unit then
Assert (No (Parent (N)));
-- The root of each unit should not have a parent
+
elsif N in N_Entity_Id and then Is_Itype (N) then
- Assert (No (Parent (N)), Check_Itype_Parents);
- -- Itypes should not have a parent
+ null; -- An Itype might or might not have a parent
+
else
if Nkind (N) = N_Error then
Assert (False, Check_Error_Nodes);
More information about the Gcc-cvs
mailing list