aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2024-05-21 19:49:32 +0200
committerMarc Poulhiès <poulhies@adacore.com>2024-06-21 10:34:18 +0200
commitc5aed359a563c48f616d58f708c398f8494d7731 (patch)
tree76b00fb77bc57287279ee08e3769a1f437bd762a /gcc/ada
parenta0546a36e007d1def02f5a575d1b4e2a08a66115 (diff)
downloadgcc-c5aed359a563c48f616d58f708c398f8494d7731.zip
gcc-c5aed359a563c48f616d58f708c398f8494d7731.tar.gz
gcc-c5aed359a563c48f616d58f708c398f8494d7731.tar.bz2
ada: Fix assertion failure on predicate involving access parameter
The assertion fails because the Original_Node of the expression has no Etype since its an unanalyzed identifier. gcc/ada/ * accessibility.adb (Accessibility_Level): Apply the processing to Expr when its Original_Node is an unanalyzed identifier.
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/accessibility.adb13
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ada/accessibility.adb b/gcc/ada/accessibility.adb
index da4d1d9..2981033 100644
--- a/gcc/ada/accessibility.adb
+++ b/gcc/ada/accessibility.adb
@@ -398,7 +398,7 @@ package body Accessibility is
-- Local variables
- E : Node_Id := Original_Node (Expr);
+ E : Node_Id;
Pre : Node_Id;
-- Start of processing for Accessibility_Level
@@ -409,6 +409,17 @@ package body Accessibility is
if Present (Param_Entity (Expr)) then
E := Param_Entity (Expr);
+
+ -- Use the original node unless it is an unanalyzed identifier, as we
+ -- don't want to reason on unanalyzed expressions from predicates.
+
+ elsif Nkind (Original_Node (Expr)) /= N_Identifier
+ or else Analyzed (Original_Node (Expr))
+ then
+ E := Original_Node (Expr);
+
+ else
+ E := Expr;
end if;
-- Extract the entity