Commit f61580d4 by Arnaud Charlet

[multiple changes]

2009-06-22  Jose Ruiz  <ruiz@adacore.com>

	* sysdep.c (__gnat_localtime_tzoff for RTX):
	SystemTimeToTzSpecificLocalTime is not supported by RTX. Use
	GetTimeZoneInformation instead.

2009-06-22  Robert Dewar  <dewar@adacore.com>

	* sem_res.adb (Check_No_Direct_Boolean_Operators): New procedure

2009-06-22  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch12.adb (Collect_Previous_Instances): Do not collect
	instantiations declared in a previous generic package body.

2009-06-22  Robert Dewar  <dewar@adacore.com>

	* gnat_rm.texi: Add doc that X=True and X=False is allowed for the
	restriction No_Direct_Boolean_Operators.

2009-06-22  Thomas Quinot  <quinot@adacore.com>

	* bindusg.adb: Minor fixes to gnatbind usage message

	* sem_eval.adb: Minor reformatting

From-SVN: r148794
parent 6823270c
2009-06-22 Jose Ruiz <ruiz@adacore.com>
* sysdep.c (__gnat_localtime_tzoff for RTX):
SystemTimeToTzSpecificLocalTime is not supported by RTX. Use
GetTimeZoneInformation instead.
2009-06-22 Robert Dewar <dewar@adacore.com>
* sem_res.adb (Check_No_Direct_Boolean_Operators): New procedure
2009-06-22 Ed Schonberg <schonberg@adacore.com>
* sem_ch12.adb (Collect_Previous_Instances): Do not collect
instantiations declared in a previous generic package body.
2009-06-22 Robert Dewar <dewar@adacore.com>
* gnat_rm.texi: Add doc that X=True and X=False is allowed for the
restriction No_Direct_Boolean_Operators.
2009-06-22 Thomas Quinot <quinot@adacore.com>
* bindusg.adb: Minor fixes to gnatbind usage message
* sem_eval.adb: Minor reformatting
2009-06-22 Javier Miranda <miranda@adacore.com>
* sem_ch3.adb (Analyze_Object_Declaration, Freeze_Entity): Move to the
......
......@@ -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- --
......@@ -99,7 +99,7 @@ package body Bindusg is
-- Line for D switch
Write_Line (" -Dnn[k|m] Default secondary stack " &
"size = nnn [kilo|mega] bytes");
"size = nn [kilo|mega] bytes");
-- Line for -e switch
......@@ -108,7 +108,7 @@ package body Bindusg is
-- Line for -E switch
Write_Line (" -E Store tracebacks in Exception occurrences");
Write_Line (" -E Store tracebacks in exception occurrences");
-- The -f switch is voluntarily omitted, because it is obsolete
......
......@@ -8431,7 +8431,9 @@ This restriction ensures that no logical (and/or/xor) or comparison
operators are used on operands of type Boolean (or any type derived
from Boolean). This is intended for use in safety critical programs
where the certification protocol requires the use of short-circuit
(and then, or else) forms for all composite boolean operations.
(and then, or else) forms for all composite boolean operations. An
exception is that an explicit equality test with True or False as the
right operand is not considered to violate this restriction.
@item No_Dispatching_Calls
@findex No_Dispatching_Calls
......
......@@ -706,7 +706,7 @@ package body Sem_Eval is
return Unknown;
-- For access types, the only time we know the result at compile time
-- (apart from identical operands, which we handled already, is if we
-- (apart from identical operands, which we handled already) is if we
-- know one operand is null and the other is not, or both operands are
-- known null.
......@@ -720,9 +720,7 @@ package body Sem_Eval is
return Unknown;
end if;
elsif Known_Non_Null (L)
and then Known_Null (R)
then
elsif Known_Non_Null (L) and then Known_Null (R) then
return NE;
else
......@@ -792,7 +790,7 @@ package body Sem_Eval is
-- For remaining scalar cases we know exactly (note that this does
-- include the fixed-point case, where we know the run time integer
-- values now)
-- values now).
else
declare
......
......@@ -119,6 +119,11 @@ package body Sem_Res is
-- initialization of individual components within the init proc itself.
-- Could be optimized away perhaps?
procedure Check_No_Direct_Boolean_Operators (N : Node_Id);
-- N is the node for a comparison or logical operator. If the operator
-- is predefined, and the root type of the operands is Standard.Boolean,
-- then a check is made for restriction No_Direct_Boolean_Operators.
function Is_Definite_Access_Type (E : Entity_Id) return Boolean;
-- Determine whether E is an access type declared by an access
-- declaration, and not an (anonymous) allocator type.
......@@ -926,6 +931,38 @@ package body Sem_Res is
end if;
end Check_Initialization_Call;
---------------------------------------
-- Check_No_Direct_Boolean_Operators --
---------------------------------------
procedure Check_No_Direct_Boolean_Operators (N : Node_Id) is
begin
if Scope (Entity (N)) = Standard_Standard
and then Root_Type (Etype (Left_Opnd (N))) = Standard_Boolean
then
-- Restriction does not apply to generated code
if not Comes_From_Source (N) then
null;
-- Restriction does not apply for A=False, A=True
elsif Nkind (N) = N_Op_Eq
and then (Is_Entity_Name (Right_Opnd (N))
and then (Entity (Right_Opnd (N)) = Standard_True
or else
Entity (Right_Opnd (N)) = Standard_False))
then
null;
-- Otherwise restriction applies
else
Check_Restriction (No_Direct_Boolean_Operators, N);
end if;
end if;
end Check_No_Direct_Boolean_Operators;
------------------------------
-- Check_Parameterless_Call --
------------------------------
......@@ -5431,6 +5468,8 @@ package body Sem_Res is
T : Entity_Id;
begin
Check_No_Direct_Boolean_Operators (N);
-- If this is an intrinsic operation which is not predefined, use the
-- types of its declared arguments to resolve the possibly overloaded
-- operands. Otherwise the operands are unambiguous and specify the
......@@ -6154,6 +6193,8 @@ package body Sem_Res is
-- Start of processing for Resolve_Equality_Op
begin
Check_No_Direct_Boolean_Operators (N);
Set_Etype (N, Base_Type (Typ));
Generate_Reference (T, N, ' ');
......@@ -6609,9 +6650,10 @@ package body Sem_Res is
procedure Resolve_Logical_Op (N : Node_Id; Typ : Entity_Id) is
B_Typ : Entity_Id;
N_Opr : constant Node_Kind := Nkind (N);
begin
Check_No_Direct_Boolean_Operators (N);
-- Predefined operations on scalar types yield the base type. On the
-- other hand, logical operations on arrays yield the type of the
-- arguments (and the context).
......@@ -6654,15 +6696,6 @@ package body Sem_Res is
Set_Etype (N, B_Typ);
Generate_Operator_Reference (N, B_Typ);
Eval_Logical_Op (N);
-- Check for violation of restriction No_Direct_Boolean_Operators
-- if the operator was not eliminated by the Eval_Logical_Op call.
if Nkind (N) = N_Opr
and then Root_Type (Etype (Left_Opnd (N))) = Standard_Boolean
then
Check_Restriction (No_Direct_Boolean_Operators, N);
end if;
end Resolve_Logical_Op;
---------------------------
......
......@@ -764,6 +764,22 @@ __gnat_localtime_tzoff (const time_t *timer, long *off)
(*Lock_Task) ();
#ifdef RTX
tzi_status = GetTimeZoneInformation (&tzi);
*off = tzi.Bias;
if (tzi_status == TIME_ZONE_ID_STANDARD)
/* The system is operating in the range covered by the StandardDate
member. */
*off = *off + tzi.StandardBias;
else if (tzi_status == TIME_ZONE_ID_DAYLIGHT)
/* The system is operating in the range covered by the DaylightDate
member. */
*off = *off + tzi.DaylightBias;
*off = *off * -60;
#else
/* First convert unix time_t structure to windows FILETIME format. */
utc_time.ull_time = ((unsigned long long) *timer + w32_epoch_offset)
* 10000000ULL;
......@@ -792,6 +808,8 @@ __gnat_localtime_tzoff (const time_t *timer, long *off)
else
*off = - (long) ((utc_time.ull_time - local_time.ull_time) / 10000000ULL);
#endif
(*Unlock_Task) ();
}
......
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