[multiple changes]

2013-10-13  Thomas Quinot  <quinot@adacore.com>

	* scos.ads: Minor documentation clarification.

2013-10-13  Thomas Quinot  <quinot@adacore.com>

	* s-oscons-tmplt.c (CLOCK_RT_Ada): Set to CLOCK_MONOTONIC when
	building on AIX 5.3 or later, and to CLOCK_REALTIME on older
	versions of AIX.
	* init.c (pthread_condattr_setclock): Remove now useless weak symbol.
	* thread.c(__gnat_pthread_condattr_setup): Remove bogus AIX 5.2
	compatibility shim.
	* s-osinte-aix.ads(clock_id_t): Fix C mapping (this is a 64-bit
	type).
	(clock_gettime): Import from C runtime library.
	* s-osinte-aix.adb (clock_gettime): Remove bogus emulation body,
	this routine is provided by the system in current supported
	versions of AIX.

2013-10-13  Robert Dewar  <dewar@adacore.com>

	* sem_ch3.adb: Minor reformatting.

2013-10-13  Ed Schonberg  <schonberg@adacore.com>

	* freeze.adb (Freeze_Entity): For a function whose return type
	is incomplete, do not replace the type with the full view if the
	type is a limited view.  In that case the full view appears in a
	different unit, and the back-end will retrieve it at the proper
	elaboration point.

2013-10-13  Yannick Moy  <moy@adacore.com>

	* exp_spark.adb (Expand_SPARK_Call): Do not introduce temporaries for
	actuals.

From-SVN: r203503
This commit is contained in:
Arnaud Charlet 2013-10-13 18:21:32 +02:00
parent cf895a0159
commit ad0d71b531
10 changed files with 67 additions and 103 deletions

View File

@ -1,3 +1,39 @@
2013-10-13 Thomas Quinot <quinot@adacore.com>
* scos.ads: Minor documentation clarification.
2013-10-13 Thomas Quinot <quinot@adacore.com>
* s-oscons-tmplt.c (CLOCK_RT_Ada): Set to CLOCK_MONOTONIC when
building on AIX 5.3 or later, and to CLOCK_REALTIME on older
versions of AIX.
* init.c (pthread_condattr_setclock): Remove now useless weak symbol.
* thread.c(__gnat_pthread_condattr_setup): Remove bogus AIX 5.2
compatibility shim.
* s-osinte-aix.ads(clock_id_t): Fix C mapping (this is a 64-bit
type).
(clock_gettime): Import from C runtime library.
* s-osinte-aix.adb (clock_gettime): Remove bogus emulation body,
this routine is provided by the system in current supported
versions of AIX.
2013-10-13 Robert Dewar <dewar@adacore.com>
* sem_ch3.adb: Minor reformatting.
2013-10-13 Ed Schonberg <schonberg@adacore.com>
* freeze.adb (Freeze_Entity): For a function whose return type
is incomplete, do not replace the type with the full view if the
type is a limited view. In that case the full view appears in a
different unit, and the back-end will retrieve it at the proper
elaboration point.
2013-10-13 Yannick Moy <moy@adacore.com>
* exp_spark.adb (Expand_SPARK_Call): Do not introduce temporaries for
actuals.
2013-10-13 Ed Schonberg <schonberg@adacore.com>
* sem_ch3.adb: in Ada 2012 access_to_function types can have

View File

@ -26,7 +26,6 @@
with Atree; use Atree;
with Einfo; use Einfo;
with Exp_Ch4; use Exp_Ch4;
with Exp_Ch6; use Exp_Ch6;
with Exp_Dbug; use Exp_Dbug;
with Exp_Util; use Exp_Util;
with Sem_Aux; use Sem_Aux;
@ -43,9 +42,7 @@ package body Exp_SPARK is
procedure Expand_SPARK_Call (N : Node_Id);
-- This procedure contains common processing for function and procedure
-- calls:
-- * expansion of actuals to introduce necessary temporaries
-- * replacement of renaming by subprogram renamed
-- calls: replacement of renaming by subprogram renamed
procedure Expand_SPARK_N_Object_Renaming_Declaration (N : Node_Id);
-- Perform name evaluation for a renamed object
@ -106,7 +103,6 @@ package body Exp_SPARK is
procedure Expand_SPARK_Call (N : Node_Id) is
Call_Node : constant Node_Id := N;
Parent_Subp : Entity_Id;
Subp : Entity_Id;
begin
-- Ignore if previous error
@ -120,14 +116,12 @@ package body Exp_SPARK is
-- Call using access to subprogram with explicit dereference
if Nkind (Name (Call_Node)) = N_Explicit_Dereference then
Subp := Etype (Name (Call_Node));
Parent_Subp := Empty;
-- Case of call to simple entry, where the Name is a selected component
-- whose prefix is the task, and whose selector name is the entry name
elsif Nkind (Name (Call_Node)) = N_Selected_Component then
Subp := Entity (Selector_Name (Name (Call_Node)));
Parent_Subp := Empty;
-- Case of call to member of entry family, where Name is an indexed
@ -135,20 +129,14 @@ package body Exp_SPARK is
-- task and entry family name, and the index being the entry index.
elsif Nkind (Name (Call_Node)) = N_Indexed_Component then
Subp := Entity (Selector_Name (Prefix (Name (Call_Node))));
Parent_Subp := Empty;
-- Normal case
else
Subp := Entity (Name (Call_Node));
Parent_Subp := Alias (Subp);
Parent_Subp := Alias (Entity (Name (Call_Node)));
end if;
-- Various expansion activities for actuals are carried out
Expand_Actuals (N, Subp);
-- If the subprogram is a renaming, replace it in the call with the name
-- of the actual subprogram being called.

View File

@ -2956,6 +2956,7 @@ package body Freeze is
if Is_Incomplete_Type (F_Type)
and then Present (Full_View (F_Type))
and then not From_With_Type (F_Type)
then
F_Type := Full_View (F_Type);
Set_Etype (Formal, F_Type);
@ -3134,10 +3135,15 @@ package body Freeze is
R_Type := Etype (E);
-- AI05-0151: the return type may have been incomplete
-- at the point of declaration.
-- at the point of declaration. Replace it with the full
-- view, unless the current type is a limited view. In
-- that case the full view is in a different unit, and
-- gigi finds the non-limited view after the other unit
-- is elaborated.
if Ekind (R_Type) = E_Incomplete_Type
and then Present (Full_View (R_Type))
and then not From_With_Type (R_Type)
then
R_Type := Full_View (R_Type);
Set_Etype (E, R_Type);

View File

@ -226,19 +226,6 @@ nanosleep (struct timestruc_t *Rqtp, struct timestruc_t *Rmtp)
#endif /* _AIXVERSION_430 */
/* Version of AIX before 5.3 don't have pthread_condattr_setclock:
* supply it as a weak symbol here so that if linking on a 5.3 or newer
* machine, we get the real one.
*/
#ifndef _AIXVERSION_530
#pragma weak pthread_condattr_setclock
int
pthread_condattr_setclock (pthread_condattr_t *attr, clockid_t cl) {
return 0;
}
#endif
static void
__gnat_error_handler (int sig,
siginfo_t *si ATTRIBUTE_UNUSED,

View File

@ -1407,11 +1407,15 @@ CND(CLOCK_FASTEST, "Fastest clock")
#endif
CND(CLOCK_THREAD_CPUTIME_ID, "Thread CPU clock")
#if defined(__FreeBSD__) || defined(_AIX)
#if defined(__FreeBSD__) || (defined(_AIX) && defined(_AIXVERSION_530))
/** On these platforms use system provided monotonic clock instead of
** the default CLOCK_REALTIME. Note: We then need to set up cond var
** attributes appropriately (see thread.c).
** the default CLOCK_REALTIME. We then need to set up cond var attributes
** appropriately (see thread.c).
**
** Note that AIX 5.2 does not support CLOCK_MONOTONIC timestamps for
** pthread_cond_timedwait (and does not have pthread_condattr_setclock),
** hence the conditionalization on AIX version above). _AIXVERSION_530
** is defined in AIX 5.3 and more recent versions.
**/
# define CLOCK_RT_Ada "CLOCK_MONOTONIC"

View File

@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 1997-2009, Free Software Foundation, Inc. --
-- Copyright (C) 1997-2013, Free Software Foundation, Inc. --
-- --
-- GNARL 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- --
@ -99,48 +99,6 @@ package body System.OS_Interface is
tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
end To_Timespec;
-------------------
-- clock_gettime --
-------------------
function clock_gettime
(clock_id : clockid_t;
tp : access timespec)
return int
is
pragma Unreferenced (clock_id);
-- Older AIX don't have clock_gettime, so use gettimeofday
use Interfaces;
type timeval is array (1 .. 2) of C.long;
procedure timeval_to_duration
(T : not null access timeval;
sec : not null access C.long;
usec : not null access C.long);
pragma Import (C, timeval_to_duration, "__gnat_timeval_to_duration");
Micro : constant := 10**6;
sec : aliased C.long;
usec : aliased C.long;
TV : aliased timeval;
Result : int;
function gettimeofday
(Tv : access timeval;
Tz : System.Address := System.Null_Address) return int;
pragma Import (C, gettimeofday, "gettimeofday");
begin
Result := gettimeofday (TV'Access, System.Null_Address);
pragma Assert (Result = 0);
timeval_to_duration (TV'Access, sec'Access, usec'Access);
tp.all := To_Timespec (Duration (sec) + Duration (usec) / Micro);
return Result;
end clock_gettime;
-----------------
-- sched_yield --
-----------------

View File

@ -7,7 +7,7 @@
-- S p e c --
-- --
-- Copyright (C) 1991-1994, Florida State University --
-- Copyright (C) 1995-2011, Free Software Foundation, Inc. --
-- Copyright (C) 1995-2013, 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- --
@ -41,6 +41,7 @@
with Ada.Unchecked_Conversion;
with Interfaces.C;
with Interfaces.C.Extensions;
package System.OS_Interface is
pragma Preelaborate;
@ -55,6 +56,7 @@ package System.OS_Interface is
subtype int is Interfaces.C.int;
subtype short is Interfaces.C.short;
subtype long is Interfaces.C.long;
subtype long_long is Interfaces.C.Extensions.long_long;
subtype unsigned is Interfaces.C.unsigned;
subtype unsigned_short is Interfaces.C.unsigned_short;
subtype unsigned_long is Interfaces.C.unsigned_long;
@ -197,11 +199,12 @@ package System.OS_Interface is
type timespec is private;
type clockid_t is new int;
type clockid_t is new long_long;
function clock_gettime
(clock_id : clockid_t;
tp : access timespec) return int;
pragma Import (C, clock_gettime, "clock_gettime");
function To_Duration (TS : timespec) return Duration;
pragma Inline (To_Duration);

View File

@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 2009-2012, Free Software Foundation, Inc. --
-- Copyright (C) 2009-2013, 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- --
@ -367,11 +367,12 @@ package SCOs is
Last : Boolean := False;
Pragma_Sloc : Source_Ptr := No_Location;
-- For the statement SCO for a pragma, or for any expression SCO nested
-- in a pragma Debug/Assert/PPC, location of PRAGMA token (used for
-- control of SCO output, value not recorded in ALI file). For the
-- decision SCO for an aspect, or for any expression SCO nested in an
-- aspect, location of aspect identifier token (likewise).
-- For the decision SCO of a pragma, or for the decision SCO of any
-- expression nested in a pragma Debug/Assert/PPC, location of PRAGMA
-- token (used for control of SCO output, value not recorded in ALI
-- file). Similarly, for the decision SCO of an aspect, or for the
-- decision SCO of any expression nested in an aspect, location of
-- aspect identifier token.
Pragma_Aspect_Name : Name_Id := No_Name;
-- For the SCO for a pragma/aspect, gives the pragma/apsect name

View File

@ -4052,7 +4052,7 @@ package body Sem_Ch3 is
-- type with constraints. In this case the entity has been introduced
-- in the private declaration.
-- Finally this happens in some complex cases when validity checks are
-- Finally this happens in some complex cases when validity checks are
-- enabled, where the same subtype declaration may be analyzed twice.
-- This can happen if the subtype is created by the pre-analysis of
-- an attribute tht gives the range of a loop statement, and the loop

View File

@ -40,27 +40,8 @@
# include <pthread.h>
# include <time.h>
#ifndef _AIXVERSION_530
/* We use the same runtime library for AIX 5.2 and 5.3, but pthread_condattr_
* setclock exists only on the latter, so for the former provide a dummy
* implementation (declared below, weak symbol defined in init.c).
*
* Note: this means that under AIX 5.2 we'll be using CLOCK_MONOTONIC
* timestamps from clock_gettime() as arguments to pthread_cond_timedwait,
* which expects a CLOCK_REALTIME value, which is technically wrong, but
* inocuous in practice on that particular platform since both clocks happen
* to use close epochs.
*/
extern int pthread_condattr_setclock (pthread_condattr_t *attr, clockid_t cl);
#endif
int
__gnat_pthread_condattr_setup(pthread_condattr_t *attr) {
/*
* If using a clock other than CLOCK_REALTIME for the Ada Monotonic_Clock,
* the corresponding clock id must be set for condition variables.
*/
return pthread_condattr_setclock (attr, CLOCK_RT_Ada);
}