[Ada] Crash compiling SPARK ghost functions with callgraph info
authorJavier Miranda <miranda@adacore.com>
Tue, 21 Aug 2018 14:47:05 +0000 (14:47 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 21 Aug 2018 14:47:05 +0000 (14:47 +0000)
The compiler blows up generating the callgraph output of SPARK ghost
subprograms whose contracts invoke ghost functions.

2018-08-21  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* exp_cg.adb (Generate_CG_Output): Handle calls removed by the
expander.

From-SVN: r263722

gcc/ada/ChangeLog
gcc/ada/exp_cg.adb

index dee70642a427d1308229d2d6033b8797b7489682..e9e674b8a1417701f51f0056f5158dbd251c5604 100644 (file)
@@ -1,3 +1,8 @@
+2018-08-21  Javier Miranda  <miranda@adacore.com>
+
+       * exp_cg.adb (Generate_CG_Output): Handle calls removed by the
+       expander.
+
 2018-08-21  Ed Schonberg  <schonberg@adacore.com>
 
        * layout.adb: Do not set size of access subprogram if unnesting.
index 00f029b10fd3e6c954222d526d8da867eae73e17..f40dc7e9c2a7b33be97024479345564d73bcb549 100644 (file)
@@ -121,7 +121,14 @@ package body Exp_CG is
       for J in Call_Graph_Nodes.First .. Call_Graph_Nodes.Last loop
          N := Call_Graph_Nodes.Table (J);
 
-         if Nkind (N) in N_Subprogram_Call then
+         --  No action needed for subprogram calls removed by the expander
+         --  (for example, calls to ignored ghost entities).
+
+         if Nkind (N) = N_Null_Statement then
+            pragma Assert (Nkind (Original_Node (N)) in N_Subprogram_Call);
+            null;
+
+         elsif Nkind (N) in N_Subprogram_Call then
             Write_Call_Info (N);
 
          else pragma Assert (Nkind (N) = N_Defining_Identifier);