[Ada] Don't allow entry in implicit with chain to be ghost

Message ID 20211202162846.GA2157510@adacore.com
State Committed
Commit eccc7c8cbfda3d8b6210543127b000d028631b6b
Headers
Series [Ada] Don't allow entry in implicit with chain to be ghost |

Commit Message

Pierre-Marie de Rodat Dec. 2, 2021, 4:28 p.m. UTC
  When we add an entry to the implicit with chain of a unit while adding
an RTS unit, we must not mark it as a ignored ghost statement because it
points to the next with in the chain.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

	* rtsfind.adb (Maybe_Add_With): Ensure that the added "with" is
	never marked as ignored ghost code.
  

Patch

diff --git a/gcc/ada/rtsfind.adb b/gcc/ada/rtsfind.adb
--- a/gcc/ada/rtsfind.adb
+++ b/gcc/ada/rtsfind.adb
@@ -1248,9 +1248,10 @@  package body Rtsfind is
       --  for this unit to the current compilation unit.
 
       declare
-         LibUnit : constant Node_Id := Unit (Cunit (U.Unum));
-         Clause  : Node_Id;
-         Withn   : Node_Id;
+         LibUnit  : constant Node_Id         := Unit (Cunit (U.Unum));
+         Saved_GM : constant Ghost_Mode_Type := Ghost_Mode;
+         Clause   : Node_Id;
+         Withn    : Node_Id;
 
       begin
          Clause := U.First_Implicit_With;
@@ -1262,11 +1263,18 @@  package body Rtsfind is
             Clause := Next_Implicit_With (Clause);
          end loop;
 
+         --  We want to make sure that the "with" we create below isn't
+         --  marked as ignored ghost code because this list may be walked
+         --  later, after ignored ghost code is converted to a null
+         --  statement.
+
+         Ghost_Mode := None;
          Withn :=
            Make_With_Clause (Standard_Location,
              Name =>
                Make_Unit_Name
                  (U, Defining_Unit_Name (Specification (LibUnit))));
+         Ghost_Mode := Saved_GM;
 
          Set_Corresponding_Spec  (Withn, U.Entity);
          Set_First_Name          (Withn);