sem_ch6.adb (Analyze_Expression_Function): Mark body of expression function as ghost...
authorYannick Moy <moy@adacore.com>
Wed, 6 Jul 2016 13:41:20 +0000 (13:41 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 6 Jul 2016 13:41:20 +0000 (15:41 +0200)
2016-07-06  Yannick Moy  <moy@adacore.com>

* sem_ch6.adb (Analyze_Expression_Function): Mark body of
expression function as ghost if needed when created.
* sem_prag.adb (Analyze_Pragma.Process_Inline.Set_Inline_Flags):
Remove special case.

From-SVN: r238051

gcc/ada/ChangeLog
gcc/ada/sem_ch6.adb
gcc/ada/sem_prag.adb

index 8f060caf8ab01c934048fe039f5f83aa9bc2957d..98e47fbc7589299d23cf348b8bf68399bf48f80f 100644 (file)
@@ -1,3 +1,10 @@
+2016-07-06  Yannick Moy  <moy@adacore.com>
+
+       * sem_ch6.adb (Analyze_Expression_Function): Mark body of
+       expression function as ghost if needed when created.
+       * sem_prag.adb (Analyze_Pragma.Process_Inline.Set_Inline_Flags):
+       Remove special case.
+
 2016-07-06  Arnaud Charlet  <charlet@adacore.com>
 
        * lib.adb (Check_Same_Extended_Unit): Complete previous change.
index 86083eb69550eca993da3603053b7e3bd4ed4d15..a47ebda2807102227b9b544df5d8b65cd767db67 100644 (file)
@@ -486,6 +486,15 @@ package body Sem_Ch6 is
 
          Set_Is_Inlined (Defining_Entity (N));
 
+         --  If the expression function is Ghost, mark its body entity as
+         --  Ghost too. This avoids spurious errors on unanalyzed body entities
+         --  of expression functions, which are not yet marked as ghost, yet
+         --  identified as the Corresponding_Body of the ghost declaration.
+
+         if Is_Ghost_Entity (Def_Id) then
+            Set_Is_Ghost_Entity (Defining_Entity (New_Body));
+         end if;
+
          --  Establish the linkages between the spec and the body. These are
          --  used when the expression function acts as the prefix of attribute
          --  'Access in order to freeze the original expression which has been
index 3b9d9841f47a0c0622cbaa2e18a3378b543d2aa3..f603e317af479a20c59b10405a1365ec2ffcd479 100644 (file)
@@ -9080,14 +9080,6 @@ package body Sem_Prag is
                   Ghost_Id := Subp;
                end if;
 
-            --  Do not issue an error on an unanalyzed subprogram body entity.
-            --  It may lead to spurious errors on unanalyzed body entities of
-            --  expression functions, which are not yet marked as ghost, yet
-            --  identified as the Corresponding_Body of the ghost declaration.
-
-            elsif Ekind (Subp) = E_Void then
-               null;
-
             --  Otherwise the subprogram is non-Ghost. It is illegal to mix
             --  references to Ghost and non-Ghost entities (SPARK RM 6.9).