https://gcc.gnu.org/g:20dfaae2d1ba4749db13792105a32c5d8ef422e3

commit r15-445-g20dfaae2d1ba4749db13792105a32c5d8ef422e3
Author: Yannick Moy <m...@adacore.com>
Date:   Thu Feb 8 11:47:20 2024 +0100

    ada: Fix ghost policy in use for generic instantiation
    
    The Ghost assertion policy relevant for analyzing a generic instantiation
    is the Ghost policy at the point of instantiation, not the one applicable
    for the generic itself.
    
    gcc/ada/
    
            * ghost.adb (Mark_And_Set_Ghost_Instantiation): Fix the current
            Ghost policy for the instantiation.

Diff:
---
 gcc/ada/ghost.adb | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/gcc/ada/ghost.adb b/gcc/ada/ghost.adb
index 14951a031d9e..677089039e8b 100644
--- a/gcc/ada/ghost.adb
+++ b/gcc/ada/ghost.adb
@@ -1734,13 +1734,17 @@ package body Ghost is
       elsif Ghost_Mode = Ignore then
          Policy := Name_Ignore;
 
-      --  Inherit the "ghostness" of the generic unit
+      --  Inherit the "ghostness" of the generic unit, but the current Ghost
+      --  policy is the relevant one for the instantiation.
 
-      elsif Is_Checked_Ghost_Entity (Gen_Id) then
-         Policy := Name_Check;
+      elsif Is_Checked_Ghost_Entity (Gen_Id)
+        or else Is_Ignored_Ghost_Entity (Gen_Id)
+      then
+         Policy := Policy_In_Effect (Name_Ghost);
 
-      elsif Is_Ignored_Ghost_Entity (Gen_Id) then
-         Policy := Name_Ignore;
+         if Policy = No_Name then
+            Policy := Name_Ignore;
+         end if;
       end if;
 
       --  Mark the instantiation as Ghost

Reply via email to