File : exp_ch12.adb


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT COMPILER COMPONENTS                         --
   4 --                                                                          --
   5 --                             E X P _ C H 1 2                              --
   6 --                                                                          --
   7 --                                 B o d y                                  --
   8 --                                                                          --
   9 --          Copyright (C) 1997-2011, Free Software Foundation, Inc.         --
  10 --                                                                          --
  11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  12 -- terms of the  GNU General Public License as published  by the Free Soft- --
  13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
  14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
  17 -- for  more details.  You should have  received  a copy of the GNU General --
  18 -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
  19 -- http://www.gnu.org/licenses for a complete copy of the license.          --
  20 --                                                                          --
  21 -- GNAT was originally developed  by the GNAT team at  New York University. --
  22 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  23 --                                                                          --
  24 ------------------------------------------------------------------------------
  25 
  26 with Atree;    use Atree;
  27 with Checks;   use Checks;
  28 with Einfo;    use Einfo;
  29 with Exp_Util; use Exp_Util;
  30 with Nmake;    use Nmake;
  31 with Sinfo;    use Sinfo;
  32 with Snames;   use Snames;
  33 with Stand;    use Stand;
  34 with Tbuild;   use Tbuild;
  35 
  36 package body Exp_Ch12 is
  37 
  38    ------------------------------------
  39    -- Expand_N_Generic_Instantiation --
  40    ------------------------------------
  41 
  42    --  If elaboration entity is defined and this is not an outer level entity,
  43    --  we need to generate a check for it here.
  44 
  45    procedure Expand_N_Generic_Instantiation (N : Node_Id) is
  46       Loc : constant Source_Ptr := Sloc (N);
  47       Ent : constant Entity_Id  := Entity (Name (N));
  48 
  49    begin
  50       if Etype (Name (N)) = Any_Type then
  51          return;
  52       end if;
  53 
  54       if Present (Elaboration_Entity (Ent))
  55         and then not Is_Compilation_Unit (Ent)
  56         and then not Elaboration_Checks_Suppressed (Ent)
  57       then
  58          Insert_Action (Instance_Spec (N),
  59            Make_Raise_Program_Error (Loc,
  60              Condition =>
  61                Make_Op_Not (Loc,
  62                  Right_Opnd =>
  63                    Make_Attribute_Reference (Loc,
  64                      Attribute_Name => Name_Elaborated,
  65                      Prefix         => New_Occurrence_Of (Ent, Loc))),
  66              Reason => PE_Access_Before_Elaboration));
  67       end if;
  68    end Expand_N_Generic_Instantiation;
  69 
  70 end Exp_Ch12;