From 69cb258c42f443c2def36a9e6864c7a3538e323c Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Wed, 29 Apr 2009 14:03:14 +0200 Subject: [multiple changes] 2009-04-29 Albert Lee * 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 * 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. From-SVN: r146954 --- gcc/ada/g-socthi-vms.ads | 7 ++++--- gcc/ada/g-socthi-vxworks.ads | 4 ++-- gcc/ada/sem_ch6.adb | 18 +++++++++++++++++- 3 files changed, 23 insertions(+), 6 deletions(-) (limited to 'gcc/ada') diff --git a/gcc/ada/g-socthi-vms.ads b/gcc/ada/g-socthi-vms.ads index 9725d91..6df9335 100644 --- a/gcc/ada/g-socthi-vms.ads +++ b/gcc/ada/g-socthi-vms.ads @@ -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 diff --git a/gcc/ada/g-socthi-vxworks.ads b/gcc/ada/g-socthi-vxworks.ads index 9164155..88638f9 100644 --- a/gcc/ada/g-socthi-vxworks.ads +++ b/gcc/ada/g-socthi-vxworks.ads @@ -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); diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index c44a48b..1e7bf88 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -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); -- cgit v1.1