[multiple changes]
2014-06-13 Hristian Kirtchev <kirtchev@adacore.com> * freeze.adb (Freeze_Record_Type): Remove checks related to SPARK volatile types. (Freeze_Type): Volatile types are now illegal in SPARK. 2014-06-13 Robert Dewar <dewar@adacore.com> * aspects.ads, aspects.adb: Add aspect Thread_Local_Storage. * gnat_rm.texi: Document aspect Thread_Local_Storage. 2014-06-13 Ed Schonberg <schonberg@adacore.com> * sem_cat.adb (Validate_Static_Object_Name): A constant whose value is a temporary that renames an aggregate is legal in a preelaborated unit. Illegalities, if any will be detected in the aggregate components. 2014-06-13 Ed Schonberg <schonberg@adacore.com> * einfo.ads: Minor reformatting an comment expansion. From-SVN: r211613
This commit is contained in:
parent
5af638c875
commit
aa6113321a
|
@ -1,3 +1,25 @@
|
||||||
|
2014-06-13 Hristian Kirtchev <kirtchev@adacore.com>
|
||||||
|
|
||||||
|
* freeze.adb (Freeze_Record_Type): Remove checks related to SPARK
|
||||||
|
volatile types.
|
||||||
|
(Freeze_Type): Volatile types are now illegal in SPARK.
|
||||||
|
|
||||||
|
2014-06-13 Robert Dewar <dewar@adacore.com>
|
||||||
|
|
||||||
|
* aspects.ads, aspects.adb: Add aspect Thread_Local_Storage.
|
||||||
|
* gnat_rm.texi: Document aspect Thread_Local_Storage.
|
||||||
|
|
||||||
|
2014-06-13 Ed Schonberg <schonberg@adacore.com>
|
||||||
|
|
||||||
|
* sem_cat.adb (Validate_Static_Object_Name): A constant whose
|
||||||
|
value is a temporary that renames an aggregate is legal in a
|
||||||
|
preelaborated unit. Illegalities, if any will be detected in
|
||||||
|
the aggregate components.
|
||||||
|
|
||||||
|
2014-06-13 Ed Schonberg <schonberg@adacore.com>
|
||||||
|
|
||||||
|
* einfo.ads: Minor reformatting an comment expansion.
|
||||||
|
|
||||||
2014-06-13 Robert Dewar <dewar@adacore.com>
|
2014-06-13 Robert Dewar <dewar@adacore.com>
|
||||||
|
|
||||||
* back_end.ads, back_end.adb: Make_Id, Make_SC, Set_RND are moved to
|
* back_end.ads, back_end.adb: Make_Id, Make_SC, Set_RND are moved to
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
-- --
|
-- --
|
||||||
-- B o d y --
|
-- B o d y --
|
||||||
-- --
|
-- --
|
||||||
-- Copyright (C) 2010-2013, Free Software Foundation, Inc. --
|
-- Copyright (C) 2010-2014, Free Software Foundation, Inc. --
|
||||||
-- --
|
-- --
|
||||||
-- GNAT is free software; you can redistribute it and/or modify it under --
|
-- 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- --
|
-- terms of the GNU General Public License as published by the Free Soft- --
|
||||||
|
@ -583,6 +583,7 @@ package body Aspects is
|
||||||
Aspect_Suppress_Debug_Info => Aspect_Suppress_Debug_Info,
|
Aspect_Suppress_Debug_Info => Aspect_Suppress_Debug_Info,
|
||||||
Aspect_Synchronization => Aspect_Synchronization,
|
Aspect_Synchronization => Aspect_Synchronization,
|
||||||
Aspect_Test_Case => Aspect_Test_Case,
|
Aspect_Test_Case => Aspect_Test_Case,
|
||||||
|
Aspect_Thread_Local_Storage => Aspect_Thread_Local_Storage,
|
||||||
Aspect_Type_Invariant => Aspect_Invariant,
|
Aspect_Type_Invariant => Aspect_Invariant,
|
||||||
Aspect_Unchecked_Union => Aspect_Unchecked_Union,
|
Aspect_Unchecked_Union => Aspect_Unchecked_Union,
|
||||||
Aspect_Universal_Aliasing => Aspect_Universal_Aliasing,
|
Aspect_Universal_Aliasing => Aspect_Universal_Aliasing,
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
-- --
|
-- --
|
||||||
-- S p e c --
|
-- S p e c --
|
||||||
-- --
|
-- --
|
||||||
-- Copyright (C) 2010-2013, Free Software Foundation, Inc. --
|
-- Copyright (C) 2010-2014, Free Software Foundation, Inc. --
|
||||||
-- --
|
-- --
|
||||||
-- GNAT is free software; you can redistribute it and/or modify it under --
|
-- 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- --
|
-- terms of the GNU General Public License as published by the Free Soft- --
|
||||||
|
@ -183,6 +183,7 @@ package Aspects is
|
||||||
Aspect_Shared, -- GNAT (equivalent to Atomic)
|
Aspect_Shared, -- GNAT (equivalent to Atomic)
|
||||||
Aspect_Simple_Storage_Pool_Type, -- GNAT
|
Aspect_Simple_Storage_Pool_Type, -- GNAT
|
||||||
Aspect_Suppress_Debug_Info, -- GNAT
|
Aspect_Suppress_Debug_Info, -- GNAT
|
||||||
|
Aspect_Thread_Local_Storage, -- GNAT
|
||||||
Aspect_Unchecked_Union,
|
Aspect_Unchecked_Union,
|
||||||
Aspect_Universal_Aliasing, -- GNAT
|
Aspect_Universal_Aliasing, -- GNAT
|
||||||
Aspect_Unmodified, -- GNAT
|
Aspect_Unmodified, -- GNAT
|
||||||
|
@ -237,6 +238,7 @@ package Aspects is
|
||||||
Aspect_Simple_Storage_Pool => True,
|
Aspect_Simple_Storage_Pool => True,
|
||||||
Aspect_Simple_Storage_Pool_Type => True,
|
Aspect_Simple_Storage_Pool_Type => True,
|
||||||
Aspect_Suppress_Debug_Info => True,
|
Aspect_Suppress_Debug_Info => True,
|
||||||
|
Aspect_Thread_Local_Storage => True,
|
||||||
Aspect_Test_Case => True,
|
Aspect_Test_Case => True,
|
||||||
Aspect_Universal_Aliasing => True,
|
Aspect_Universal_Aliasing => True,
|
||||||
Aspect_Universal_Data => True,
|
Aspect_Universal_Data => True,
|
||||||
|
@ -454,6 +456,7 @@ package Aspects is
|
||||||
Aspect_Stream_Size => Name_Stream_Size,
|
Aspect_Stream_Size => Name_Stream_Size,
|
||||||
Aspect_Suppress => Name_Suppress,
|
Aspect_Suppress => Name_Suppress,
|
||||||
Aspect_Suppress_Debug_Info => Name_Suppress_Debug_Info,
|
Aspect_Suppress_Debug_Info => Name_Suppress_Debug_Info,
|
||||||
|
Aspect_Thread_Local_Storage => Name_Thread_Local_Storage,
|
||||||
Aspect_Synchronization => Name_Synchronization,
|
Aspect_Synchronization => Name_Synchronization,
|
||||||
Aspect_Test_Case => Name_Test_Case,
|
Aspect_Test_Case => Name_Test_Case,
|
||||||
Aspect_Type_Invariant => Name_Type_Invariant,
|
Aspect_Type_Invariant => Name_Type_Invariant,
|
||||||
|
@ -647,6 +650,7 @@ package Aspects is
|
||||||
Aspect_Stream_Size => Always_Delay,
|
Aspect_Stream_Size => Always_Delay,
|
||||||
Aspect_Suppress => Always_Delay,
|
Aspect_Suppress => Always_Delay,
|
||||||
Aspect_Suppress_Debug_Info => Always_Delay,
|
Aspect_Suppress_Debug_Info => Always_Delay,
|
||||||
|
Aspect_Thread_Local_Storage => Always_Delay,
|
||||||
Aspect_Type_Invariant => Always_Delay,
|
Aspect_Type_Invariant => Always_Delay,
|
||||||
Aspect_Unchecked_Union => Always_Delay,
|
Aspect_Unchecked_Union => Always_Delay,
|
||||||
Aspect_Universal_Aliasing => Always_Delay,
|
Aspect_Universal_Aliasing => Always_Delay,
|
||||||
|
|
|
@ -4057,6 +4057,11 @@ package Einfo is
|
||||||
-- types, is to legitimize code where Underlying_Type is applied to an
|
-- types, is to legitimize code where Underlying_Type is applied to an
|
||||||
-- entity which may or may not be a type, with the intent that if it is a
|
-- entity which may or may not be a type, with the intent that if it is a
|
||||||
-- type, its underlying type is taken.
|
-- type, its underlying type is taken.
|
||||||
|
--
|
||||||
|
-- Note also that the value of this attribute is interesting only after
|
||||||
|
-- the full view of the parent type has been processed. If the parent
|
||||||
|
-- type is declared in an enclosing package, the attribute will be non-
|
||||||
|
-- trivial only after the full view of the type has been analyzed.
|
||||||
|
|
||||||
-- Universal_Aliasing (Flag216) [implementation base type only]
|
-- Universal_Aliasing (Flag216) [implementation base type only]
|
||||||
-- Defined in all type entities. Set to direct the back-end to avoid
|
-- Defined in all type entities. Set to direct the back-end to avoid
|
||||||
|
|
|
@ -3355,38 +3355,6 @@ package body Freeze is
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
-- The following checks are only relevant when SPARK_Mode is on as
|
|
||||||
-- they are not standard Ada legality rules.
|
|
||||||
|
|
||||||
if SPARK_Mode = On then
|
|
||||||
|
|
||||||
-- Volatile types are not allowed in SPARK (SPARK RM C.6(1))
|
|
||||||
|
|
||||||
if Is_SPARK_Volatile (Rec) then
|
|
||||||
Error_Msg_N ("volatile type not allowed", Rec);
|
|
||||||
|
|
||||||
-- A non-volatile record type cannot contain volatile components
|
|
||||||
-- (SPARK RM C.6(2)). The check is performed at freeze point
|
|
||||||
-- because the volatility status of the record type and its
|
|
||||||
-- components is clearly known.
|
|
||||||
|
|
||||||
else
|
|
||||||
Comp := First_Component (Rec);
|
|
||||||
while Present (Comp) loop
|
|
||||||
if Comes_From_Source (Comp)
|
|
||||||
and then Is_SPARK_Volatile (Comp)
|
|
||||||
then
|
|
||||||
Error_Msg_Name_1 := Chars (Rec);
|
|
||||||
Error_Msg_N
|
|
||||||
("component & of non-volatile record type % cannot be "
|
|
||||||
& "volatile", Comp);
|
|
||||||
end if;
|
|
||||||
|
|
||||||
Next_Component (Comp);
|
|
||||||
end loop;
|
|
||||||
end if;
|
|
||||||
end if;
|
|
||||||
|
|
||||||
-- All done if not a full record definition
|
-- All done if not a full record definition
|
||||||
|
|
||||||
if Ekind (Rec) /= E_Record_Type then
|
if Ekind (Rec) /= E_Record_Type then
|
||||||
|
@ -3718,6 +3686,14 @@ package body Freeze is
|
||||||
Analyze_Aspects_At_Freeze_Point (E);
|
Analyze_Aspects_At_Freeze_Point (E);
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
|
-- The following check is only relevant when SPARK_Mode is on as this
|
||||||
|
-- is not a standard Ada legality rule. Volatile types are not allowed
|
||||||
|
-- (SPARK RM C.6(1)).
|
||||||
|
|
||||||
|
if SPARK_Mode = On and then Is_SPARK_Volatile (E) then
|
||||||
|
Error_Msg_N ("volatile type not allowed", E);
|
||||||
|
end if;
|
||||||
|
|
||||||
-- Here to freeze the entity
|
-- Here to freeze the entity
|
||||||
|
|
||||||
Set_Is_Frozen (E);
|
Set_Is_Frozen (E);
|
||||||
|
|
|
@ -304,6 +304,7 @@ Implementation Defined Aspects
|
||||||
* Aspect SPARK_Mode::
|
* Aspect SPARK_Mode::
|
||||||
* Aspect Suppress_Debug_Info::
|
* Aspect Suppress_Debug_Info::
|
||||||
* Aspect Test_Case::
|
* Aspect Test_Case::
|
||||||
|
* Aspect Thread_Local_Storage::
|
||||||
* Aspect Universal_Aliasing::
|
* Aspect Universal_Aliasing::
|
||||||
* Aspect Universal_Data::
|
* Aspect Universal_Data::
|
||||||
* Aspect Unmodified::
|
* Aspect Unmodified::
|
||||||
|
@ -7867,6 +7868,7 @@ clause.
|
||||||
* Aspect SPARK_Mode::
|
* Aspect SPARK_Mode::
|
||||||
* Aspect Suppress_Debug_Info::
|
* Aspect Suppress_Debug_Info::
|
||||||
* Aspect Test_Case::
|
* Aspect Test_Case::
|
||||||
|
* Aspect Thread_Local_Storage::
|
||||||
* Aspect Universal_Aliasing::
|
* Aspect Universal_Aliasing::
|
||||||
* Aspect Universal_Data::
|
* Aspect Universal_Data::
|
||||||
* Aspect Unmodified::
|
* Aspect Unmodified::
|
||||||
|
@ -8125,6 +8127,12 @@ This aspect is equivalent to pragma @code{Suppress_Debug_Info}.
|
||||||
@noindent
|
@noindent
|
||||||
This aspect is equivalent to pragma @code{Test_Case}.
|
This aspect is equivalent to pragma @code{Test_Case}.
|
||||||
|
|
||||||
|
@node Aspect Thread_Local_Storage
|
||||||
|
@unnumberedsec Aspect Thread_Local_Storage
|
||||||
|
@findex Thread_Local_Storage
|
||||||
|
@noindent
|
||||||
|
This aspect is equivalent to pragma @code{Thread_Local_Storage}.
|
||||||
|
|
||||||
@node Aspect Universal_Aliasing
|
@node Aspect Universal_Aliasing
|
||||||
@unnumberedsec Aspect Universal_Aliasing
|
@unnumberedsec Aspect Universal_Aliasing
|
||||||
@findex Universal_Aliasing
|
@findex Universal_Aliasing
|
||||||
|
@ -20834,6 +20842,7 @@ A complete description of the AIs may be found in
|
||||||
@item @code{Suppress} @tab
|
@item @code{Suppress} @tab
|
||||||
@item @code{Suppress_Debug_Info} @tab -- GNAT
|
@item @code{Suppress_Debug_Info} @tab -- GNAT
|
||||||
@item @code{Test_Case} @tab -- GNAT
|
@item @code{Test_Case} @tab -- GNAT
|
||||||
|
@item @code{Thread_Local_Storage} @tab -- GNAT
|
||||||
@item @code{Type_Invariant} @tab
|
@item @code{Type_Invariant} @tab
|
||||||
@item @code{Unchecked_Union} @tab
|
@item @code{Unchecked_Union} @tab
|
||||||
@item @code{Universal_Aliasing} @tab -- GNAT
|
@item @code{Universal_Aliasing} @tab -- GNAT
|
||||||
|
|
|
@ -2048,7 +2048,8 @@ package body Sem_Cat is
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
procedure Validate_Static_Object_Name (N : Node_Id) is
|
procedure Validate_Static_Object_Name (N : Node_Id) is
|
||||||
E : Entity_Id;
|
E : Entity_Id;
|
||||||
|
Val : Node_Id;
|
||||||
|
|
||||||
function Is_Primary (N : Node_Id) return Boolean;
|
function Is_Primary (N : Node_Id) return Boolean;
|
||||||
-- Determine whether node is syntactically a primary in an expression
|
-- Determine whether node is syntactically a primary in an expression
|
||||||
|
@ -2151,7 +2152,8 @@ package body Sem_Cat is
|
||||||
elsif Ekind (Entity (N)) = E_Constant
|
elsif Ekind (Entity (N)) = E_Constant
|
||||||
and then not Is_Static_Expression (N)
|
and then not Is_Static_Expression (N)
|
||||||
then
|
then
|
||||||
E := Entity (N);
|
E := Entity (N);
|
||||||
|
Val := Constant_Value (E);
|
||||||
|
|
||||||
if Is_Internal_File_Name (Unit_File_Name (Get_Source_Unit (N)))
|
if Is_Internal_File_Name (Unit_File_Name (Get_Source_Unit (N)))
|
||||||
and then
|
and then
|
||||||
|
@ -2169,6 +2171,21 @@ package body Sem_Cat is
|
||||||
then
|
then
|
||||||
null;
|
null;
|
||||||
|
|
||||||
|
-- If the value of the constant is a local variable that renames
|
||||||
|
-- an aggregate, this is in itself legal. The aggregate may be
|
||||||
|
-- expanded into a loop, but this does not affect preelaborability
|
||||||
|
-- in itself. If some aggregate components are non-static, that is
|
||||||
|
-- to say if they involve non static primaries, they will be
|
||||||
|
-- flagged when analyzed.
|
||||||
|
|
||||||
|
elsif Present (Val)
|
||||||
|
and then Is_Entity_Name (Val)
|
||||||
|
and then Is_Array_Type (Etype (Val))
|
||||||
|
and then not Comes_From_Source (Val)
|
||||||
|
and then Nkind (Original_Node (Val)) = N_Aggregate
|
||||||
|
then
|
||||||
|
null;
|
||||||
|
|
||||||
-- This is the error case
|
-- This is the error case
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue