Commit 56272abe by Arnaud Charlet

[multiple changes]

2011-11-21  Pascal Obry  <obry@adacore.com>

	* s-taprop-linux.adb (Initialize_Lock): Do not allocate a cond
	attribute as not needed.

2011-11-21  Robert Dewar  <dewar@adacore.com>

	* sem_prag.adb: Minor reformatting.

2011-11-21  Pascal Obry  <obry@adacore.com>

	* gnat_rm.texi: Document restriction for stdcall convention on
	dispatching calls.

From-SVN: r181565
parent a5dd23a7
2011-11-21 Pascal Obry <obry@adacore.com> 2011-11-21 Pascal Obry <obry@adacore.com>
* s-taprop-linux.adb (Initialize_Lock): Do not allocate a cond
attribute as not needed.
2011-11-21 Robert Dewar <dewar@adacore.com>
* sem_prag.adb: Minor reformatting.
2011-11-21 Pascal Obry <obry@adacore.com>
* gnat_rm.texi: Document restriction for stdcall convention on
dispatching calls.
2011-11-21 Pascal Obry <obry@adacore.com>
* sem_prag.adb (Process_Convention): A dispatching call cannot * sem_prag.adb (Process_Convention): A dispatching call cannot
have a stdcall calling convention. have a stdcall calling convention.
......
...@@ -9633,7 +9633,8 @@ separate section on Intrinsic Subprograms. ...@@ -9633,7 +9633,8 @@ separate section on Intrinsic Subprograms.
@item Stdcall @item Stdcall
Stdcall (used for Windows implementations only). This convention correspond Stdcall (used for Windows implementations only). This convention correspond
to the WINAPI (previously called Pascal convention) C/C++ convention under to the WINAPI (previously called Pascal convention) C/C++ convention under
Windows. A function with this convention cleans the stack before exit. Windows. A routine with this convention cleans the stack before
exit. This pragma cannot be applied to a dispatching call.
@item DLL @item DLL
Synonym for Stdcall Synonym for Stdcall
@item Win32 @item Win32
......
...@@ -1069,8 +1069,7 @@ package body System.Task_Primitives.Operations is ...@@ -1069,8 +1069,7 @@ package body System.Task_Primitives.Operations is
---------------- ----------------
procedure Initialize (S : in out Suspension_Object) is procedure Initialize (S : in out Suspension_Object) is
Cond_Attr : aliased pthread_condattr_t; Result : Interfaces.C.int;
Result : Interfaces.C.int;
begin begin
-- Initialize internal state (always to False (RM D.10(6))) -- Initialize internal state (always to False (RM D.10(6)))
...@@ -1090,10 +1089,7 @@ package body System.Task_Primitives.Operations is ...@@ -1090,10 +1089,7 @@ package body System.Task_Primitives.Operations is
-- Initialize internal condition variable -- Initialize internal condition variable
Result := pthread_condattr_init (Cond_Attr'Access); Result := pthread_cond_init (S.CV'Access, null);
pragma Assert (Result = 0);
Result := pthread_cond_init (S.CV'Access, Cond_Attr'Access);
pragma Assert (Result = 0 or else Result = ENOMEM); pragma Assert (Result = 0 or else Result = ENOMEM);
......
...@@ -3524,13 +3524,25 @@ package body Sem_Prag is ...@@ -3524,13 +3524,25 @@ package body Sem_Prag is
("second argument of pragma% must be a subprogram", Arg2); ("second argument of pragma% must be a subprogram", Arg2);
end if; end if;
-- For Stdcall, a subprogram, variable or subprogram type is required -- Stdcall case
if C = Convention_Stdcall if C = Convention_Stdcall
-- Subprogram is allowed, but not a generic subprogram, and not a
-- dispatching operation. A dispatching subprogram cannot be used
-- to interface to the Win32 API, so in fact this check does not
-- impose any effective restriction.
and then and then
((not Is_Subprogram (E) and then not Is_Generic_Subprogram (E)) ((not Is_Subprogram (E) and then not Is_Generic_Subprogram (E))
or else Is_Dispatching_Operation (E)) or else Is_Dispatching_Operation (E))
-- A variable is OK
and then Ekind (E) /= E_Variable and then Ekind (E) /= E_Variable
-- An access to subprogram is also allowed
and then not and then not
(Is_Access_Type (E) (Is_Access_Type (E)
and then Ekind (Designated_Type (E)) = E_Subprogram_Type) and then Ekind (Designated_Type (E)) = E_Subprogram_Type)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment