diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2024-05-21 19:49:32 +0200 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2024-06-21 10:34:18 +0200 |
commit | c5aed359a563c48f616d58f708c398f8494d7731 (patch) | |
tree | 76b00fb77bc57287279ee08e3769a1f437bd762a | |
parent | a0546a36e007d1def02f5a575d1b4e2a08a66115 (diff) | |
download | gcc-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.
-rw-r--r-- | gcc/ada/accessibility.adb | 13 |
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 |