OSDN Git Service

2009-04-29 Albert Lee <lee@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Apr 2009 12:03:14 +0000 (12:03 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Apr 2009 12:03:14 +0000 (12:03 +0000)
* g-socthi-vxworks.ads: Change the spec of Msghdr to match the one in
the default version of GNAT.Sockets.Thin.

* g-socthi-vms.ads: Change the spec of Msghdr to match the one in the
default version of GNAT.Sockets.Thin.

2009-04-29  Ed Schonberg  <schonberg@adacore.com>

* sem_ch6.adb (Analyze_Subprogram_Specification): If the subprogram is
an overriding operation of an inherited interface operation, and the
controlling type is a synchronized type, we replace the type with its
corresponding record, to match the proper signature of an overriding
operation. The same processing must be performed for an access
parameter whose designated type is derived from a synchronized
interface.

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

gcc/ada/g-socthi-vms.ads
gcc/ada/g-socthi-vxworks.ads
gcc/ada/sem_ch6.adb

index 9725d91..6df9335 100644 (file)
@@ -59,14 +59,15 @@ package GNAT.Sockets.Thin is
 
    type Msghdr is record
       Msg_Name       : System.Address;
-      Msg_Namelen    : C.int;
+      Msg_Namelen    : C.unsigned;
       Msg_Iov        : System.Address;
-      Msg_Iovlen     : C.int;
+      Msg_Iovlen     : C.size_t;
       Msg_Control    : System.Address;
-      Msg_Controllen : C.int;
+      Msg_Controllen : C.size_t;
       Msg_Flags      : C.int;
    end record;
    pragma Convention (C, Msghdr);
+   --  This type needs comments???
 
    function Socket_Errno return Integer renames GNAT.OS_Lib.Errno;
    --  Returns last socket error number
index 9164155..88638f9 100644 (file)
@@ -59,9 +59,9 @@ package GNAT.Sockets.Thin is
       Msg_Name       : System.Address;
       Msg_Namelen    : C.unsigned;
       Msg_Iov        : System.Address;
-      Msg_Iovlen     : C.int;
+      Msg_Iovlen     : C.size_t;
       Msg_Control    : System.Address;
-      Msg_Controllen : C.unsigned;
+      Msg_Controllen : C.size_t;
       Msg_Flags      : C.int;
    end record;
    pragma Convention (C, Msghdr);
index c44a48b..1e7bf88 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2008, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2009, 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- --
@@ -2835,12 +2835,15 @@ package body Sem_Ch6 is
          --  inherited interface operation, and the controlling type is
          --  a synchronized type, replace the type with its corresponding
          --  record, to match the proper signature of an overriding operation.
+         --  Same processing for an access parameter whose designated type is
+         --  derived from a synchronized interface.
 
          if Ada_Version >= Ada_05 then
             declare
                Formal     : Entity_Id;
                Formal_Typ : Entity_Id;
                Rec_Typ    : Entity_Id;
+               Desig_Typ  : Entity_Id;
 
             begin
                Formal := First_Formal (Designator);
@@ -2855,6 +2858,19 @@ package body Sem_Ch6 is
                      if Present (Interfaces (Rec_Typ)) then
                         Set_Etype (Formal, Rec_Typ);
                      end if;
+
+                  elsif Ekind (Formal_Typ) = E_Anonymous_Access_Type then
+                     Desig_Typ := Designated_Type (Formal_Typ);
+
+                     if Is_Concurrent_Type (Desig_Typ)
+                       and then Present (Corresponding_Record_Type (Desig_Typ))
+                     then
+                        Rec_Typ := Corresponding_Record_Type (Desig_Typ);
+
+                        if Present (Interfaces (Rec_Typ)) then
+                           Set_Directly_Designated_Type (Formal_Typ, Rec_Typ);
+                        end if;
+                     end if;
                   end if;
 
                   Next_Formal (Formal);