2010-06-18 Javier Miranda <miranda@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 18 Jun 2010 15:03:14 +0000 (15:03 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 18 Jun 2010 15:03:14 +0000 (15:03 +0000)
* exp_cg.adb, exp_cg.ads, exp_disp.adb, gnat1drv.adb: Add initial
support for dispatch table/callgraph info generation.
* gcc-interface/Make-lang.in: Update dependencies.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160997 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/exp_cg.adb [new file with mode: 0644]
gcc/ada/exp_cg.ads [new file with mode: 0644]
gcc/ada/exp_disp.adb
gcc/ada/gcc-interface/Make-lang.in
gcc/ada/gnat1drv.adb

index a9d01dd..5e3968e 100644 (file)
@@ -1,3 +1,9 @@
+2010-06-18  Javier Miranda  <miranda@adacore.com>
+
+       * exp_cg.adb, exp_cg.ads, exp_disp.adb, gnat1drv.adb: Add initial
+       support for dispatch table/callgraph info generation.
+       * gcc-interface/Make-lang.in: Update dependencies.
+
 2010-06-18  Robert Dewar  <dewar@adacore.com>
 
        * exp_ch6.adb: Minor reformatting.
diff --git a/gcc/ada/exp_cg.adb b/gcc/ada/exp_cg.adb
new file mode 100644 (file)
index 0000000..2b735e3
--- /dev/null
@@ -0,0 +1,582 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--                               E X P _ C G                                --
+--                                                                          --
+--                                 B o d y                                  --
+--                                                                          --
+--             Copyright (C) 2010, Free Software Foundation, Inc.           --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+-- for  more details.  You should have  received  a copy of the GNU General --
+-- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+-- http://www.gnu.org/licenses for a complete copy of the license.          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+with Atree;    use Atree;
+with Debug;    use Debug;
+with Einfo;    use Einfo;
+with Elists;   use Elists;
+with Exp_Disp; use Exp_Disp;
+with Exp_Tss;  use Exp_Tss;
+--  with Interfaces.C;
+--  with Interfaces.C_Streams;
+--  Why are these commented out ???
+with Lib;      use Lib;
+with Namet;    use Namet;
+with Opt;      use Opt;
+with Output;   use Output;
+with Sem_Disp; use Sem_Disp;
+with Sem_Type; use Sem_Type;
+with Sem_Util; use Sem_Util;
+with Sinfo;    use Sinfo;
+with Sinput;   use Sinput;
+with Snames;   use Snames;
+with Table;
+with Uintp;    use Uintp;
+
+package body Exp_CG is
+
+   --  package ICS renames Interfaces.C_Streams;
+
+   package Call_Graph_Nodes is new Table.Table (
+      Table_Component_Type => Node_Id,
+      Table_Index_Type     => Natural,
+      Table_Low_Bound      => 1,
+      Table_Initial        => 50,
+      Table_Increment      => 100,
+      Table_Name           => "Call_Graph_Nodes");
+   --  Document this table! ???
+
+   function Is_Predefined_Dispatching_Operation (E : Entity_Id) return Boolean;
+   --  Determines if E is a predefined primitive operation.
+   --  Note: This routine should replace the routine with the same name that is
+   --  currently available in exp_disp because it extends its functionality to
+   --  handle fully qualified names ???
+
+   function Slot_Number (Prim : Entity_Id) return Uint;
+   --  Returns the slot number associated with Prim. For predefined primitives
+   --  the slot is returned as a negative number.
+
+   procedure Write_Output (Str : String);
+   --  Used to print a line in the output file (this is used as the
+   --  argument for a call to Set_Special_Output in package Output).
+
+   procedure Write_Call_Info (Call : Node_Id);
+   --  Subsidiary of Generate_CG_Output that generates the output associated
+   --  with a dispatching call.
+
+   procedure Write_Type_Info (Typ : Entity_Id);
+   --  Subsidiary of Generate_CG_Output that generates the output associated
+   --  with a tagged type declaration.
+
+   ------------------------
+   -- Generate_CG_Output --
+   ------------------------
+
+   procedure Generate_CG_Output is
+      N : Node_Id;
+
+   begin
+      if not Debug_Flag_Dot_Z then
+         return;
+      end if;
+
+      --  Setup write routine, create the output file and generate the output
+
+      Set_Special_Output (Write_Output'Access);
+
+      for J in Call_Graph_Nodes.First .. Call_Graph_Nodes.Last loop
+         N := Call_Graph_Nodes.Table (J);
+
+         if Nkind_In (N, N_Procedure_Call_Statement, N_Function_Call) then
+            Write_Call_Info (N);
+
+         else pragma Assert (Nkind (N) = N_Defining_Identifier);
+            pragma Assert (Is_Tagged_Type (N));
+
+            Write_Type_Info (N);
+         end if;
+      end loop;
+   end Generate_CG_Output;
+
+   ----------------
+   -- Initialize --
+   ----------------
+
+   procedure Initialize is
+   begin
+      Call_Graph_Nodes.Init;
+   end Initialize;
+
+   -----------------------------------------
+   -- Is_Predefined_Dispatching_Operation --
+   -----------------------------------------
+
+   function Is_Predefined_Dispatching_Operation
+     (E : Entity_Id) return Boolean
+   is
+      function Homonym_Suffix_Length (E : Entity_Id) return Natural;
+      --  Returns the length of the homonym suffix corresponding to E.
+      --  Note: This routine relies on the functionality provided by routines
+      --  of Exp_Dbug. Further work needed here to decide if it should be
+      --  located in that package???
+
+      ---------------------------
+      -- Homonym_Suffix_Length --
+      ---------------------------
+
+      function Homonym_Suffix_Length (E : Entity_Id) return Natural is
+         Prefix_Length : constant := 2; --  Length of prefix "__"
+
+         H  : Entity_Id;
+         Nr : Nat := 1;
+
+      begin
+         if not Has_Homonym (E) then
+            return 0;
+
+         else
+            H := Homonym (E);
+            while Present (H) loop
+               if Scope (H) = Scope (E) then
+                  Nr := Nr + 1;
+               end if;
+
+               H := Homonym (H);
+            end loop;
+
+            if Nr = 1 then
+               return 0;
+
+            --  Prefix "__" followed by number
+
+            elsif Nr < 10 then
+               return Prefix_Length + 1;
+
+            elsif Nr < 100 then
+               return Prefix_Length + 2;
+
+            elsif Nr < 1000 then
+               return Prefix_Length + 3;
+
+            else
+               pragma Assert (False);
+               raise Program_Error;
+            end if;
+         end if;
+      end Homonym_Suffix_Length;
+
+      --  Local variables
+
+      Full_Name : constant String := Get_Name_String (Chars (E));
+      TSS_Name  : TSS_Name_Type;
+
+   --  Start of processing for Is_Predefined_Dispatching_Operation
+
+   begin
+      if not Is_Dispatching_Operation (E) then
+         return False;
+      end if;
+
+      --  Most predefined primitives have internally generated names. Equality
+      --  must be treated differently; the predefined operation is recognized
+      --  as a homogeneous binary operator that returns Boolean.
+
+      if Full_Name'Length > TSS_Name_Type'Length then
+         TSS_Name :=
+           TSS_Name_Type (Full_Name (Full_Name'Last - TSS_Name'Length + 1
+                           .. Full_Name'Last));
+
+         if        TSS_Name = TSS_Stream_Read
+           or else TSS_Name = TSS_Stream_Write
+           or else TSS_Name = TSS_Stream_Input
+           or else TSS_Name = TSS_Stream_Output
+           or else TSS_Name = TSS_Deep_Adjust
+           or else TSS_Name = TSS_Deep_Finalize
+         then
+            return True;
+
+         elsif not Has_Fully_Qualified_Name (E) then
+            if        Chars (E) = Name_uSize
+              or else Chars (E) = Name_uAlignment
+              or else
+                (Chars (E) = Name_Op_Eq
+                   and then Etype (First_Entity (E)) = Etype (Last_Entity (E)))
+              or else Chars (E) = Name_uAssign
+              or else Is_Predefined_Interface_Primitive (E)
+            then
+               return True;
+            end if;
+
+         --  Handle fully qualified names
+
+         else
+            declare
+               type Names_Table is array (Positive range <>) of Name_Id;
+
+               Predef_Names_95 : constant Names_Table :=
+                                   (Name_uSize,
+                                    Name_uAlignment,
+                                    Name_Op_Eq,
+                                    Name_uAssign);
+
+               Predef_Names_05 : constant Names_Table :=
+                                   (Name_uDisp_Asynchronous_Select,
+                                    Name_uDisp_Conditional_Select,
+                                    Name_uDisp_Get_Prim_Op_Kind,
+                                    Name_uDisp_Get_Task_Id,
+                                    Name_uDisp_Requeue,
+                                    Name_uDisp_Timed_Select);
+
+               Suffix_Length : constant Natural := Homonym_Suffix_Length (E);
+
+            begin
+               for J in Predef_Names_95'Range loop
+                  Get_Name_String (Predef_Names_95 (J));
+
+                  if Full_Name'Last - Suffix_Length > Name_Len
+                    and then
+                      Full_Name
+                        (Full_Name'Last - Name_Len - Suffix_Length + 1
+                           .. Full_Name'Last - Suffix_Length) =
+                                                  Name_Buffer (1 .. Name_Len)
+                  then
+                     --  For the equality operator the type of the two operands
+                     --  must also match.
+
+                     return Predef_Names_95 (J) /= Name_Op_Eq
+                       or else
+                         Etype (First_Entity (E)) = Etype (Last_Entity (E));
+                  end if;
+               end loop;
+
+               if Ada_Version >= Ada_05 then
+                  for J in Predef_Names_05'Range loop
+                     Get_Name_String (Predef_Names_05 (J));
+
+                     if Full_Name'Last - Suffix_Length > Name_Len
+                       and then
+                         Full_Name
+                           (Full_Name'Last - Name_Len - Suffix_Length + 1
+                              .. Full_Name'Last - Suffix_Length) =
+                                                 Name_Buffer (1 .. Name_Len)
+                     then
+                        return True;
+                     end if;
+                  end loop;
+               end if;
+            end;
+         end if;
+      end if;
+
+      return False;
+   end Is_Predefined_Dispatching_Operation;
+
+   ----------------------
+   -- Register_CG_Node --
+   ----------------------
+
+   procedure Register_CG_Node (N : Node_Id) is
+   begin
+      if Nkind_In (N, N_Procedure_Call_Statement, N_Function_Call) then
+         if Current_Scope = Main_Unit_Entity
+           or else Entity_Is_In_Main_Unit (Current_Scope)
+         then
+            --  Register a copy of the dispatching call node. Needed since the
+            --  node containing a dispatching call is rewriten by the expander.
+
+            declare
+               Copy : constant Node_Id := New_Copy (N);
+
+            begin
+               --  Copy the link to the parent to allow climbing up the tree
+               --  when the call-graph information is generated
+
+               Set_Parent (Copy, Parent (N));
+               Call_Graph_Nodes.Append (Copy);
+            end;
+         end if;
+
+      else pragma Assert (Nkind (N) = N_Defining_Identifier);
+         if Entity_Is_In_Main_Unit (N) then
+            Call_Graph_Nodes.Append (N);
+         end if;
+      end if;
+   end Register_CG_Node;
+
+   -----------------
+   -- Slot_Number --
+   -----------------
+
+   function Slot_Number (Prim : Entity_Id) return Uint is
+   begin
+      if Is_Predefined_Dispatching_Operation (Prim) then
+         return -DT_Position (Prim);
+      else
+         return DT_Position (Prim);
+      end if;
+   end Slot_Number;
+
+   ------------------
+   -- Write_Output --
+   ------------------
+
+--  This functionality has been temporarily disabled because bootstrapping the
+--  compiler with old versions requires no dependency on package Interfaces.C
+
+   --  Import the file stream associated with the "ci" output file. Done to
+   --  generate the output in the file created and left opened by routine
+   --  toplev.c before calling gnat1drv.
+
+--   Callgraph_Info_File : ICS.FILEs;
+--   pragma Import (C, Callgraph_Info_File);
+
+--   procedure Write_Output (Str : String) is
+--      Line  : constant Interfaces.C.char_array := Interfaces.C.To_C (Str);
+--      Errno : ICS.int;
+--   begin
+--      Errno := ICS.fputs (Line'Address, Callgraph_Info_File);
+--      pragma Assert (Errno = 0);
+--   end Write_Output;
+
+   procedure Write_Output (Str : String) is
+   begin
+      null;
+   end Write_Output;
+
+   ---------------------
+   -- Write_Call_Info --
+   ---------------------
+
+   procedure Write_Call_Info (Call : Node_Id) is
+      Ctrl_Arg : constant Node_Id   := Controlling_Argument (Call);
+      Ctrl_Typ : constant Entity_Id := Base_Type (Etype (Ctrl_Arg));
+      Prim     : constant Entity_Id := Entity (Sinfo.Name (Call));
+      P        : Node_Id;
+
+   begin
+      --  Locate the enclosing context: a subprogram (if available) or the
+      --  enclosing library-level package
+
+      P := Parent (Call);
+      while Nkind (P) /= N_Subprogram_Body
+        and then Nkind (Parent (P)) /= N_Compilation_Unit
+      loop
+         P := Parent (P);
+         pragma Assert (Present (P));
+      end loop;
+
+      Write_Str ("edge: { sourcename: ");
+      Write_Char ('"');
+      Write_Name (Chars (Defining_Entity (P)));
+
+      if Nkind (P) = N_Package_Declaration then
+         Write_Str ("___elabs");
+
+      elsif Nkind (P) = N_Package_Body then
+         Write_Str ("___elabb");
+      end if;
+
+      Write_Char ('"');
+      Write_Eol;
+
+      --  The targetname is a triple:
+      --     N:  the index in a vtable used for dispatch
+      --     V:  the type who's vtable is used
+      --     S:  the static type of the expression
+
+      Write_Str  ("  targetname: ");
+      Write_Char ('"');
+
+      pragma Assert (No (Interface_Alias (Prim)));
+
+      --  The check on Is_Ancestor is done here to avoid problems with
+      --  renamings of primitives. For example:
+
+      --    type Root is tagged ...
+      --    procedure Base   (Obj : Root);
+      --    procedure Base2  (Obj : Root) renames Base;
+
+      if Present (Alias (Prim))
+        and then
+          Is_Ancestor
+            (Find_Dispatching_Type (Ultimate_Alias (Prim)),
+             Root_Type (Ctrl_Typ))
+      then
+         Write_Int (UI_To_Int (Slot_Number (Ultimate_Alias (Prim))));
+         Write_Char (':');
+         Write_Name
+           (Chars (Find_Dispatching_Type (Ultimate_Alias (Prim))));
+      else
+         Write_Int (UI_To_Int (Slot_Number (Prim)));
+         Write_Char (':');
+         Write_Name (Chars (Root_Type (Ctrl_Typ)));
+      end if;
+
+      Write_Char (',');
+      Write_Name (Chars (Root_Type (Ctrl_Typ)));
+
+      Write_Char ('"');
+      Write_Eol;
+
+      Write_Str  ("  label: ");
+      Write_Char ('"');
+      Write_Location (Sloc (Call));
+      Write_Char ('"');
+      Write_Eol;
+
+      Write_Char ('}');
+      Write_Eol;
+   end Write_Call_Info;
+
+   ---------------------
+   -- Write_Type_Info --
+   ---------------------
+
+   procedure Write_Type_Info (Typ : Entity_Id) is
+      Elmt : Elmt_Id;
+      Prim : Node_Id;
+
+      Parent_Typ       : Entity_Id;
+      Separator_Needed : Boolean := False;
+
+   begin
+      --  Initialize Parent_Typ handling private types
+
+      Parent_Typ := Etype (Typ);
+
+      if Present (Full_View (Parent_Typ)) then
+         Parent_Typ := Full_View (Parent_Typ);
+      end if;
+
+      Write_Str ("class {");
+      Write_Eol;
+
+      Write_Str ("  classname: ");
+      Write_Char ('"');
+      Write_Name (Chars (Typ));
+      Write_Char ('"');
+      Write_Eol;
+
+      Write_Str  ("  label: ");
+      Write_Char ('"');
+      Write_Name (Chars (Typ));
+      Write_Char ('\');
+      Write_Location (Sloc (Typ));
+      Write_Char ('"');
+      Write_Eol;
+
+      if Parent_Typ /= Typ then
+         Write_Str  ("  parent: ");
+         Write_Char ('"');
+         Write_Name (Chars (Parent_Typ));
+
+         --  Note: Einfo prefix not needed if this routine is moved to
+         --  exp_disp???
+
+         if Present (Einfo.Interfaces (Typ))
+           and then not Is_Empty_Elmt_List (Einfo.Interfaces (Typ))
+         then
+            Elmt := First_Elmt (Einfo.Interfaces (Typ));
+            while Present (Elmt) loop
+               Write_Str  (", ");
+               Write_Name (Chars (Node (Elmt)));
+               Next_Elmt  (Elmt);
+            end loop;
+         end if;
+
+         Write_Char ('"');
+         Write_Eol;
+      end if;
+
+      Write_Str ("  virtuals: ");
+      Write_Char ('"');
+
+      Elmt := First_Elmt (Primitive_Operations (Typ));
+      while Present (Elmt) loop
+         Prim := Node (Elmt);
+
+         --  Display only primitives overriden or defined
+
+         if Present (Alias (Prim)) then
+            goto Continue;
+         end if;
+
+         --  Do not generate separator for output of first primitive
+
+         if Separator_Needed then
+            Write_Str ("\n");
+            Write_Eol;
+            Write_Str ("             ");
+         else
+            Separator_Needed := True;
+         end if;
+
+         Write_Int (UI_To_Int (Slot_Number (Prim)));
+         Write_Char (':');
+         Write_Name (Chars (Prim));
+
+         --  Display overriding of parent primitives
+
+         if Present (Overridden_Operation (Prim))
+           and then
+             Is_Ancestor
+               (Find_Dispatching_Type (Overridden_Operation (Prim)), Typ)
+         then
+            Write_Char (',');
+            Write_Int
+              (UI_To_Int (Slot_Number (Overridden_Operation (Prim))));
+            Write_Char (':');
+            Write_Name
+              (Chars (Find_Dispatching_Type (Overridden_Operation (Prim))));
+         end if;
+
+         --  Display overriding of interface primitives
+
+         if Has_Interfaces (Typ) then
+            declare
+               Prim_Elmt : Elmt_Id;
+               Prim_Op   : Node_Id;
+               Int_Alias : Entity_Id;
+
+            begin
+               Prim_Elmt := First_Elmt (Primitive_Operations (Typ));
+               while Present (Prim_Elmt) loop
+                  Prim_Op := Node (Prim_Elmt);
+                  Int_Alias := Interface_Alias (Prim_Op);
+
+                  if Present (Int_Alias) and then (Alias (Prim_Op)) = Prim then
+                     Write_Char (',');
+                     Write_Int (UI_To_Int (Slot_Number (Int_Alias)));
+                     Write_Char (':');
+                     Write_Name (Chars (Find_Dispatching_Type (Int_Alias)));
+                  end if;
+
+                  Next_Elmt (Prim_Elmt);
+               end loop;
+            end;
+         end if;
+
+         <<Continue>>
+         Next_Elmt (Elmt);
+      end loop;
+
+      Write_Char ('"');
+      Write_Eol;
+
+      Write_Char ('}');
+      Write_Eol;
+   end Write_Type_Info;
+
+end Exp_CG;
diff --git a/gcc/ada/exp_cg.ads b/gcc/ada/exp_cg.ads
new file mode 100644 (file)
index 0000000..5c2458d
--- /dev/null
@@ -0,0 +1,47 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--                               E X P _ C G                                --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--             Copyright (C) 2010, Free Software Foundation, Inc.           --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+-- for  more details.  You should have  received  a copy of the GNU General --
+-- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+-- http://www.gnu.org/licenses for a complete copy of the license.          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  This package contains routines used to store and handle nodes required
+--  to generate call graph information of dispatching calls.
+
+with Types; use Types;
+
+package Exp_CG is
+
+   procedure Generate_CG_Output;
+   --  Generate in the standard output the information associated with tagged
+   --  types declaration and dispatching calls
+
+   procedure Initialize;
+   --  Called at the start of compilation to initialize the table that stores
+   --  the tree nodes used by Generate_Output. This table is required because
+   --  the format of the output requires fully qualified names (and hence the
+   --  output must be generated after the source program has been compiled).
+
+   procedure Register_CG_Node (N : Node_Id);
+   --  Register a dispatching call node or the defining entity of a tagged
+   --  type declaration
+
+end Exp_CG;
index 16baf0c..e754a2e 100644 (file)
@@ -31,6 +31,7 @@ with Elists;   use Elists;
 with Errout;   use Errout;
 with Exp_Atag; use Exp_Atag;
 with Exp_Ch7;  use Exp_Ch7;
+with Exp_CG;   use Exp_CG;
 with Exp_Dbug; use Exp_Dbug;
 with Exp_Tss;  use Exp_Tss;
 with Exp_Util; use Exp_Util;
@@ -961,6 +962,10 @@ package body Exp_Disp is
              Parameter_Associations => New_Params);
       end if;
 
+      --  Register the dispatching call in the call graph nodes table
+
+      Register_CG_Node (Call_Node);
+
       Rewrite (Call_Node, New_Call);
 
       --  Suppress all checks during the analysis of the expanded code
@@ -5969,6 +5974,10 @@ package body Exp_Disp is
          end;
       end if;
 
+      --  Register the tagged type in the call graph nodes table
+
+      Register_CG_Node (Typ);
+
       return Result;
    end Make_DT;
 
index 7c63914..e90ccad 100644 (file)
@@ -144,6 +144,7 @@ GNAT_ADA_OBJS =     \
  ada/exp_aggr.o        \
  ada/exp_atag.o        \
  ada/exp_attr.o        \
+ ada/exp_cg.o \
  ada/exp_ch11.o        \
  ada/exp_ch12.o        \
  ada/exp_ch13.o        \
@@ -188,6 +189,8 @@ GNAT_ADA_OBJS =     \
  ada/gnatvsn.o \
  ada/hlo.o     \
  ada/hostparm.o        \
+ ada/i-c.o      \
+ ada/i-cstrea.o \
  ada/impunit.o \
  ada/inline.o  \
  ada/interfac.o        \
@@ -1263,8 +1266,9 @@ ada/utils.o : ada/gcc-interface/utils.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
    $(TARGET_H) function.h langhooks.h $(CGRAPH_H) \
    $(TREE_DUMP_H) $(TREE_INLINE_H) tree-iterator.h \
    ada/gcc-interface/ada.h ada/types.h ada/atree.h ada/elists.h ada/namet.h \
-   ada/nlists.h ada/stringt.h ada/uintp.h ada/fe.h ada/sinfo.h ada/einfo.h \
-   $(ADA_TREE_H) ada/gcc-interface/gigi.h gt-ada-utils.h gtype-ada.h
+   ada/nlists.h ada/snames.h ada/stringt.h ada/uintp.h ada/fe.h ada/sinfo.h \
+   ada/einfo.h $(ADA_TREE_H) ada/gcc-interface/gigi.h gt-ada-utils.h \
+   gtype-ada.h
        $(COMPILER) -c $(ALL_COMPILERFLAGS) -I.. $(ALL_CPPFLAGS) $< -o $@
 
 ada/utils2.o : ada/gcc-interface/utils2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
@@ -1464,29 +1468,50 @@ ada/checks.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \
    ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/eval_fat.ads \
    ada/exp_aggr.ads ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch4.ads \
-   ada/exp_ch6.ads ada/exp_ch7.ads ada/exp_dist.ads ada/exp_pakd.ads \
-   ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/fname.ads \
-   ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \
-   ada/g-hesorg.ads ada/g-htable.ads ada/hostparm.ads ada/inline.ads \
-   ada/itypes.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \
-   ada/lib-load.ads ada/lib-sort.adb ada/namet.ads ada/nlists.ads \
-   ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
-   ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \
-   ada/rtsfind.adb ada/sem.ads ada/sem_aux.ads ada/sem_cat.ads \
-   ada/sem_ch3.ads ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads \
+   ada/exp_ch6.ads ada/exp_ch7.ads ada/exp_disp.ads ada/exp_dist.ads \
+   ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \
+   ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \
+   ada/gnat.ads ada/g-hesorg.ads ada/g-htable.ads ada/hostparm.ads \
+   ada/inline.ads ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib.adb \
+   ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb ada/lib-xref.ads \
+   ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \
+   ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
+   ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/rtsfind.adb \
+   ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \
+   ada/sem_attr.ads ada/sem_aux.ads ada/sem_cat.ads ada/sem_ch3.ads \
+   ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads \
    ada/sem_dist.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads \
-   ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads \
-   ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads \
-   ada/sprint.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
-   ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
-   ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
-   ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
-   ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
+   ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
+   ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+   ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \
+   ada/stringt.adb ada/style.ads ada/styleg.ads ada/styleg.adb \
+   ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
+   ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
+   ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
+   ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+   ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
    ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
    ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
    ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
-   ada/validsw.ads 
+   ada/validsw.ads ada/widechar.ads 
+
+ada/exp_cg.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
+   ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
+   ada/casing.ads ada/exp_cg.ads ada/exp_cg.adb ada/debug.ads \
+   ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \
+   ada/exp_disp.ads ada/exp_tss.ads ada/gnat.ads ada/g-htable.ads \
+   ada/hostparm.ads ada/lib.ads ada/namet.ads ada/nlists.ads \
+   ada/nlists.adb ada/nmake.ads ada/opt.ads ada/output.ads \
+   ada/sem_disp.ads ada/sem_type.ads ada/sem_util.ads ada/sinfo.ads \
+   ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
+   ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
+   ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-secsta.ads \
+   ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
+   ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
+   ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \
+   ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \
+   ada/unchdeal.ads ada/urealp.ads 
 
 ada/comperr.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -1823,8 +1848,8 @@ ada/exp_ch3.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
 
 ada/exp_ch4.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
-   ada/casing.ads ada/checks.ads ada/checks.adb ada/debug.ads \
-   ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \
+   ada/casing.ads ada/checks.ads ada/checks.adb ada/csets.ads \
+   ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \
    ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/eval_fat.ads \
    ada/exp_aggr.ads ada/exp_atag.ads ada/exp_ch11.ads ada/exp_ch2.ads \
    ada/exp_ch3.ads ada/exp_ch4.ads ada/exp_ch4.adb ada/exp_ch6.ads \
@@ -1832,24 +1857,28 @@ ada/exp_ch4.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \
    ada/exp_vfpt.ads ada/fname.ads ada/fname-uf.ads ada/freeze.ads \
    ada/get_targ.ads ada/gnat.ads ada/g-htable.ads ada/hostparm.ads \
-   ada/inline.ads ada/itypes.ads ada/lib.ads ada/namet.ads ada/nlists.ads \
+   ada/inline.ads ada/interfac.ads ada/itypes.ads ada/lib.ads \
+   ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \
    ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
    ada/par_sco.ads ada/restrict.ads ada/restrict.adb ada/rident.ads \
-   ada/rtsfind.ads ada/sem.ads ada/sem_aux.ads ada/sem_cat.ads \
+   ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \
+   ada/sem.ads ada/sem_attr.ads ada/sem_aux.ads ada/sem_cat.ads \
    ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch6.ads ada/sem_ch8.ads \
-   ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_scil.ads \
-   ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads \
-   ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/sprint.ads \
-   ada/stand.ads ada/stringt.ads ada/stringt.adb ada/system.ads \
-   ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads ada/s-imenne.ads \
-   ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
+   ada/sem_disp.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads \
+   ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
+   ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+   ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \
+   ada/stringt.adb ada/style.ads ada/styleg.ads ada/styleg.adb \
+   ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
+   ada/s-exctab.adb ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
+   ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
    ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
    ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
-   ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
-   ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
-   ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
+   ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
+   ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
+   ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
    ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
-   ada/validsw.ads 
+   ada/validsw.ads ada/widechar.ads 
 
 ada/exp_ch5.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -2048,34 +2077,34 @@ ada/exp_dbug.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
 
 ada/exp_disp.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
-   ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads ada/einfo.ads \
-   ada/einfo.adb ada/elists.ads ada/elists.adb ada/err_vars.ads \
-   ada/errout.ads ada/erroutc.ads ada/exp_aggr.ads ada/exp_atag.ads \
-   ada/exp_ch11.ads ada/exp_ch6.ads ada/exp_ch7.ads ada/exp_dbug.ads \
-   ada/exp_disp.ads ada/exp_disp.adb ada/exp_tss.ads ada/exp_tss.adb \
-   ada/exp_util.ads ada/exp_util.adb ada/fname.ads ada/fname-uf.ads \
-   ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-htable.ads \
-   ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \
-   ada/layout.ads ada/lib.ads ada/lib-xref.ads ada/namet.ads ada/namet.adb \
-   ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \
-   ada/output.ads ada/restrict.ads ada/restrict.adb ada/rident.ads \
-   ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \
-   ada/sem.ads ada/sem_attr.ads ada/sem_aux.ads ada/sem_ch6.ads \
-   ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_eval.ads \
-   ada/sem_res.ads ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads \
-   ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
-   ada/snames.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
-   ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
-   ada/system.ads ada/s-carun8.ads ada/s-crc32.ads ada/s-exctab.ads \
-   ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
-   ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
-   ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
-   ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
-   ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
-   ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
-   ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \
-   ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \
-   ada/widechar.ads 
+   ada/casing.ads ada/checks.ads ada/exp_cg.ads ada/csets.ads \
+   ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \
+   ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_aggr.ads \
+   ada/exp_atag.ads ada/exp_ch11.ads ada/exp_ch6.ads ada/exp_ch7.ads \
+   ada/exp_dbug.ads ada/exp_disp.ads ada/exp_disp.adb ada/exp_tss.ads \
+   ada/exp_tss.adb ada/exp_util.ads ada/exp_util.adb ada/fname.ads \
+   ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \
+   ada/g-htable.ads ada/hostparm.ads ada/inline.ads ada/interfac.ads \
+   ada/itypes.ads ada/layout.ads ada/lib.ads ada/lib-xref.ads \
+   ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \
+   ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
+   ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/scans.ads \
+   ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_attr.ads \
+   ada/sem_aux.ads ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads \
+   ada/sem_disp.ads ada/sem_eval.ads ada/sem_res.ads ada/sem_scil.ads \
+   ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads \
+   ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
+   ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \
+   ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-carun8.ads \
+   ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
+   ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
+   ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
+   ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
+   ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
+   ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
+   ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/types.adb \
+   ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+   ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads 
 
 ada/exp_dist.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -2102,23 +2131,31 @@ ada/exp_dist.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
 
 ada/exp_fixd.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
-   ada/casing.ads ada/checks.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \
-   ada/elists.ads ada/err_vars.ads ada/errout.ads ada/erroutc.ads \
-   ada/eval_fat.ads ada/exp_fixd.ads ada/exp_fixd.adb ada/exp_tss.ads \
-   ada/exp_util.ads ada/gnat.ads ada/g-htable.ads ada/hostparm.ads \
-   ada/lib.ads ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads \
-   ada/nmake.adb ada/opt.ads ada/output.ads ada/rtsfind.ads ada/sem.ads \
-   ada/sem_aux.ads ada/sem_cat.ads ada/sem_ch6.ads ada/sem_ch8.ads \
-   ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads \
-   ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
-   ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \
-   ada/stringt.adb ada/system.ads ada/s-exctab.ads ada/s-htable.ads \
-   ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+   ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads ada/einfo.ads \
+   ada/einfo.adb ada/elists.ads ada/err_vars.ads ada/errout.ads \
+   ada/erroutc.ads ada/eval_fat.ads ada/exp_ch11.ads ada/exp_disp.ads \
+   ada/exp_fixd.ads ada/exp_fixd.adb ada/exp_tss.ads ada/exp_util.ads \
+   ada/fname.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \
+   ada/g-htable.ads ada/hostparm.ads ada/interfac.ads ada/lib.ads \
+   ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \
+   ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
+   ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \
+   ada/scng.adb ada/sem.ads ada/sem_attr.ads ada/sem_aux.ads \
+   ada/sem_cat.ads ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads \
+   ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_scil.ads \
+   ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
+   ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
+   ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \
+   ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-crc32.ads \
+   ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
+   ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
    ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
    ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
-   ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tbuild.ads \
-   ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \
-   ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb 
+   ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
+   ada/targparm.ads ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads \
+   ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
+   ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
+   ada/widechar.ads 
 
 ada/exp_imgv.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -2288,29 +2325,34 @@ ada/exp_tss.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
 
 ada/exp_util.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
-   ada/casing.ads ada/checks.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \
-   ada/elists.ads ada/elists.adb ada/err_vars.ads ada/errout.ads \
-   ada/erroutc.ads ada/eval_fat.ads ada/exp_aggr.ads ada/exp_ch6.ads \
-   ada/exp_ch7.ads ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \
-   ada/fname.ads ada/fname-uf.ads ada/get_targ.ads ada/gnat.ads \
+   ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads ada/einfo.ads \
+   ada/einfo.adb ada/elists.ads ada/elists.adb ada/err_vars.ads \
+   ada/errout.ads ada/erroutc.ads ada/eval_fat.ads ada/exp_aggr.ads \
+   ada/exp_ch11.ads ada/exp_ch6.ads ada/exp_ch7.ads ada/exp_disp.ads \
+   ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/fname.ads \
+   ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \
    ada/g-hesorg.ads ada/g-htable.ads ada/hostparm.ads ada/inline.ads \
-   ada/itypes.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \
-   ada/lib-sort.adb ada/namet.ads ada/nlists.ads ada/nlists.adb \
-   ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
-   ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/sem.ads \
-   ada/sem_aux.ads ada/sem_cat.ads ada/sem_ch6.ads ada/sem_ch8.ads \
+   ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib.adb \
+   ada/lib-list.adb ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads \
+   ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \
+   ada/opt.ads ada/output.ads ada/restrict.ads ada/restrict.adb \
+   ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \
+   ada/scng.adb ada/sem.ads ada/sem_attr.ads ada/sem_aux.ads \
+   ada/sem_cat.ads ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads \
    ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_scil.ads \
-   ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads \
-   ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
-   ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-exctab.ads \
-   ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
-   ada/s-parame.ads ada/s-rident.ads ada/s-soflin.ads ada/s-stache.ads \
-   ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
-   ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
-   ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
-   ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
-   ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
-   ada/urealp.ads ada/urealp.adb ada/validsw.ads 
+   ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
+   ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
+   ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \
+   ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-crc32.ads \
+   ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
+   ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
+   ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
+   ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
+   ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
+   ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
+   ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
+   ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
+   ada/validsw.ads ada/widechar.ads 
 
 ada/exp_vfpt.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -2471,8 +2513,8 @@ ada/gnat.o : ada/gnat.ads ada/system.ads
 
 ada/gnat1drv.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
-   ada/back_end.ads ada/casing.ads ada/comperr.ads ada/csets.ads \
-   ada/debug.ads ada/debug_a.ads ada/einfo.ads ada/einfo.adb \
+   ada/back_end.ads ada/casing.ads ada/exp_cg.ads ada/comperr.ads \
+   ada/csets.ads ada/debug.ads ada/debug_a.ads ada/einfo.ads ada/einfo.adb \
    ada/elists.ads ada/elists.adb ada/err_vars.ads ada/errout.ads \
    ada/erroutc.ads ada/exp_tss.ads ada/expander.ads ada/fmap.ads \
    ada/fname.ads ada/fname-uf.ads ada/frontend.ads ada/get_targ.ads \
@@ -2531,6 +2573,16 @@ ada/hostparm.o : ada/ada.ads ada/a-unccon.ads ada/hostparm.ads \
    ada/system.ads ada/s-exctab.ads ada/s-stalib.ads ada/s-unstyp.ads \
    ada/types.ads ada/unchconv.ads ada/unchdeal.ads 
 
+ada/i-c.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads ada/interfac.ads \
+   ada/i-c.ads ada/i-c.adb ada/system.ads ada/s-exctab.ads \
+   ada/s-exctab.adb ada/s-htable.ads ada/s-parame.ads ada/s-secsta.ads \
+   ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
+   ada/s-stoele.adb ada/s-traent.ads 
+
+ada/i-cstrea.o : ada/ada.ads ada/a-unccon.ads ada/interfac.ads \
+   ada/i-cstrea.ads ada/i-cstrea.adb ada/system.ads ada/s-crtl.ads \
+   ada/s-parame.ads 
+
 ada/impunit.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
    ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \
@@ -3234,27 +3286,29 @@ ada/sem_attr.o : ada/ada.ads ada/a-charac.ads ada/a-chlat1.ads \
    ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/expander.ads \
    ada/fname.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \
    ada/g-htable.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \
-   ada/itypes.ads ada/lib.ads ada/lib-xref.ads ada/namet.ads \
-   ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \
-   ada/output.ads ada/restrict.ads ada/rident.ads ada/rtsfind.ads \
-   ada/scans.ads ada/sdefault.ads ada/sem.ads ada/sem_aggr.ads \
+   ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib-xref.ads \
+   ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \
+   ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
+   ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \
+   ada/scng.adb ada/sdefault.ads ada/sem.ads ada/sem_aggr.ads \
    ada/sem_attr.ads ada/sem_attr.adb ada/sem_aux.ads ada/sem_cat.ads \
    ada/sem_ch10.ads ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch4.ads \
    ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads \
    ada/sem_elab.ads ada/sem_elim.ads ada/sem_eval.ads ada/sem_eval.adb \
    ada/sem_intr.ads ada/sem_res.ads ada/sem_res.adb ada/sem_scil.ads \
-   ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads \
-   ada/sinfo.adb ada/sinput.ads ada/sinput.adb ada/snames.ads \
-   ada/snames.adb ada/sprint.ads ada/stand.ads ada/stringt.ads \
-   ada/stringt.adb ada/style.ads ada/styleg.ads ada/styleg.adb \
-   ada/stylesw.ads ada/system.ads ada/s-carun8.ads ada/s-exctab.ads \
-   ada/s-exctab.adb ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
-   ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
-   ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
-   ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
-   ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
-   ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypef.ads \
-   ada/ttypes.ads ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb \
+   ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
+   ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \
+   ada/snames.ads ada/snames.adb ada/sprint.ads ada/stand.ads \
+   ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \
+   ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-carun8.ads \
+   ada/s-crc32.ads ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads \
+   ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+   ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
+   ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
+   ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
+   ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+   ada/tbuild.adb ada/tree_io.ads ada/ttypef.ads ada/ttypes.ads \
+   ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \
    ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
    ada/validsw.ads ada/widechar.ads 
 
@@ -3675,33 +3729,33 @@ ada/sem_ch9.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
 
 ada/sem_disp.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
-   ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads ada/einfo.ads \
-   ada/einfo.adb ada/elists.ads ada/elists.adb ada/err_vars.ads \
-   ada/errout.ads ada/erroutc.ads ada/exp_aggr.ads ada/exp_atag.ads \
-   ada/exp_ch11.ads ada/exp_ch6.ads ada/exp_ch7.ads ada/exp_dbug.ads \
-   ada/exp_disp.ads ada/exp_disp.adb ada/exp_tss.ads ada/exp_util.ads \
-   ada/exp_util.adb ada/fname.ads ada/fname-uf.ads ada/freeze.ads \
-   ada/get_targ.ads ada/gnat.ads ada/g-htable.ads ada/hostparm.ads \
-   ada/inline.ads ada/interfac.ads ada/itypes.ads ada/layout.ads \
-   ada/lib.ads ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \
-   ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
-   ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \
-   ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \
-   ada/sem_attr.ads ada/sem_aux.ads ada/sem_ch3.ads ada/sem_ch6.ads \
-   ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_disp.adb \
-   ada/sem_eval.ads ada/sem_res.ads ada/sem_scil.ads ada/sem_type.ads \
-   ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb \
-   ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \
-   ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
-   ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
-   ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
-   ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
-   ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
-   ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
-   ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
-   ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
-   ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
-   ada/urealp.ads ada/validsw.ads ada/widechar.ads 
+   ada/casing.ads ada/checks.ads ada/exp_cg.ads ada/csets.ads \
+   ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \
+   ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_aggr.ads \
+   ada/exp_atag.ads ada/exp_ch11.ads ada/exp_ch6.ads ada/exp_ch7.ads \
+   ada/exp_dbug.ads ada/exp_disp.ads ada/exp_disp.adb ada/exp_tss.ads \
+   ada/exp_util.ads ada/exp_util.adb ada/fname.ads ada/fname-uf.ads \
+   ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-htable.ads \
+   ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \
+   ada/layout.ads ada/lib.ads ada/lib-xref.ads ada/namet.ads ada/namet.adb \
+   ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \
+   ada/output.ads ada/restrict.ads ada/restrict.adb ada/rident.ads \
+   ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \
+   ada/sem.ads ada/sem_attr.ads ada/sem_aux.ads ada/sem_ch3.ads \
+   ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads \
+   ada/sem_disp.adb ada/sem_eval.ads ada/sem_res.ads ada/sem_scil.ads \
+   ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads \
+   ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
+   ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \
+   ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
+   ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
+   ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
+   ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+   ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
+   ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
+   ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+   ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+   ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads 
 
 ada/sem_dist.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
index 76662c3..6c3d087 100644 (file)
@@ -30,6 +30,7 @@ with Csets;    use Csets;
 with Debug;    use Debug;
 with Elists;
 with Errout;   use Errout;
+with Exp_CG;
 with Fmap;
 with Fname;    use Fname;
 with Fname.UF; use Fname.UF;
@@ -596,6 +597,7 @@ begin
       Nlists.Initialize;
       Sinput.Initialize;
       Sem.Initialize;
+      Exp_CG.Initialize;
       Csets.Initialize;
       Uintp.Initialize;
       Urealp.Initialize;
@@ -985,6 +987,10 @@ begin
 
       Namet.Unlock;
 
+      --  Generate the call-graph output of dispatching calls
+
+      Exp_CG.Generate_CG_Output;
+
       --  Validate unchecked conversions (using the values for size and
       --  alignment annotated by the backend where possible).