OSDN Git Service

* gcc-interface/decl.c (make_type_from_size) <INTEGER_TYPE>: Just copy
[pf3gnuchains/gcc-fork.git] / gcc / ada / exp_smem.adb
index 0e3fc23..6cbca26 100644 (file)
 
 with Atree;    use Atree;
 with Einfo;    use Einfo;
+with Exp_Ch9;  use Exp_Ch9;
 with Exp_Util; use Exp_Util;
 with Nmake;    use Nmake;
 with Namet;    use Namet;
 with Nlists;   use Nlists;
 with Rtsfind;  use Rtsfind;
 with Sem;      use Sem;
+with Sem_Aux;  use Sem_Aux;
 with Sem_Util; use Sem_Util;
 with Sinfo;    use Sinfo;
 with Snames;   use Snames;
@@ -285,10 +287,12 @@ package body Exp_Smem is
    ---------------------------
 
    function Make_Shared_Var_Procs (N : Node_Id) return Node_Id is
-      Loc : constant Source_Ptr := Sloc (N);
-      Ent : constant Entity_Id  := Defining_Identifier (N);
-      Typ : constant Entity_Id  := Etype (Ent);
-      Vnm : String_Id;
+      Loc     : constant Source_Ptr := Sloc (N);
+      Ent     : constant Entity_Id  := Defining_Identifier (N);
+      Typ     : constant Entity_Id  := Etype (Ent);
+      Vnm     : String_Id;
+      Obj     : Node_Id;
+      Obj_Typ : Entity_Id;
 
       After : constant Node_Id := Next (N);
       --  Node located right after N originally (after insertion of the SV
@@ -300,7 +304,7 @@ package body Exp_Smem is
       --  with Ent.
 
       Instantiation : Node_Id;
-      --  Package instanciation node for SVP_Instance
+      --  Package instantiation node for SVP_Instance
 
    --  Start of processing for Make_Shared_Var_Procs
 
@@ -308,14 +312,21 @@ package body Exp_Smem is
       Build_Full_Name (Ent, Vnm);
 
       --  We turn off Shared_Passive during construction and analysis of
-      --  the generic package instantition, to avoid improper attempts to
+      --  the generic package instantiation, to avoid improper attempts to
       --  process the variable references within these instantiation.
 
       Set_Is_Shared_Passive (Ent, False);
 
       --  Construct generic package instantiation
 
-      --  package varG is new Shared_Var_Procs (Typ, var, "pkg.var");
+      --  package varG is new Shared_Var_Procs (typ, var, "pkg.var");
+
+      Obj     := New_Occurrence_Of (Ent, Loc);
+      Obj_Typ := Typ;
+      if Is_Concurrent_Type (Typ) then
+         Obj     := Convert_Concurrent (N => Obj, Typ => Typ);
+         Obj_Typ := Corresponding_Record_Type (Typ);
+      end if;
 
       Instantiation :=
         Make_Package_Instantiation (Loc,
@@ -323,12 +334,14 @@ package body Exp_Smem is
           Name                 =>
             New_Occurrence_Of (RTE (RE_Shared_Var_Procs), Loc),
           Generic_Associations => New_List (
-            Make_Generic_Association (Loc, Explicit_Generic_Actual_Parameter =>
-              New_Occurrence_Of (Typ, Loc)),
-            Make_Generic_Association (Loc, Explicit_Generic_Actual_Parameter =>
-              New_Occurrence_Of (Ent, Loc)),
-            Make_Generic_Association (Loc, Explicit_Generic_Actual_Parameter =>
-              Make_String_Literal (Loc, Vnm))));
+            Make_Generic_Association (Loc,
+              Explicit_Generic_Actual_Parameter =>
+                New_Occurrence_Of (Obj_Typ, Loc)),
+            Make_Generic_Association (Loc,
+              Explicit_Generic_Actual_Parameter => Obj),
+            Make_Generic_Association (Loc,
+              Explicit_Generic_Actual_Parameter =>
+                Make_String_Literal (Loc, Vnm))));
 
       Insert_After_And_Analyze (N, Instantiation);