[multiple changes]

2014-10-23  Yannick Moy  <moy@adacore.com>

	* sem_prag.adb (Analyze_Pragma/Pragma_Inline & Pragma_Inline_Always):
	Disable analysis in GNATprove mode.

2014-10-23  Arnaud Charlet  <charlet@adacore.com>

	* mlib-prj.adb: Remove obsolete references to libdecgnat (VMS only).

2014-10-23  Arnaud Charlet  <charlet@adacore.com>

	* gnat1drv.adb (Adjust_Global_Switches): Ignore style check
	pragmas in codepeer mode.

2014-10-23  Gary Dismukes  <dismukes@adacore.com>

	* gnat_rm.texi: Minor syntax fix for pragma Annotate (missing ',').

2014-10-23  Hristian Kirtchev  <kirtchev@adacore.com>

	* sem_ch12.adb (Inline_Instance_Body): Alphabetize
	local variables and constants. Add constants Save_SM and Save_SMP
	to capture SPARK_Mode-related attributes.  Compile the inlined
	body with the SPARK_Mode of the enclosing context.

2014-10-23  Hristian Kirtchev  <kirtchev@adacore.com>

	* sinfo.adb (Elaboration_Boolean): Removed.
	(Set_Elaboration_Boolean): Removed.
	* sinfo.ads Remove attribute Elaboration_Boolean along with its
	occurrence in nodes.
	(Elaboration_Boolean): Removed along with pragma Inline.
	(Set_Elaboration_Boolean): Removed along with pragma Inline.

2014-10-23  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch3.adb (Constant_Redeclaration): Make error message more
	explicit on a deferred constant whose object_definition is an
	anonymous array.

2014-10-23  Vincent Celier  <celier@adacore.com>

	* gnatls.adb: Never call Targparm.Get_Target_Parameters.

2014-10-23  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch6.adb (Analyze_Expression_Function): In a generic
	context do not create a body, and only pre-analyze the expression,
	which may include incomplete views.

From-SVN: r216584
This commit is contained in:
Arnaud Charlet 2014-10-23 12:19:58 +02:00
parent 3ad33e3395
commit b04d926e21
11 changed files with 148 additions and 82 deletions

View File

@ -1,3 +1,53 @@
2014-10-23 Yannick Moy <moy@adacore.com>
* sem_prag.adb (Analyze_Pragma/Pragma_Inline & Pragma_Inline_Always):
Disable analysis in GNATprove mode.
2014-10-23 Arnaud Charlet <charlet@adacore.com>
* mlib-prj.adb: Remove obsolete references to libdecgnat (VMS only).
2014-10-23 Arnaud Charlet <charlet@adacore.com>
* gnat1drv.adb (Adjust_Global_Switches): Ignore style check
pragmas in codepeer mode.
2014-10-23 Gary Dismukes <dismukes@adacore.com>
* gnat_rm.texi: Minor syntax fix for pragma Annotate (missing ',').
2014-10-23 Hristian Kirtchev <kirtchev@adacore.com>
* sem_ch12.adb (Inline_Instance_Body): Alphabetize
local variables and constants. Add constants Save_SM and Save_SMP
to capture SPARK_Mode-related attributes. Compile the inlined
body with the SPARK_Mode of the enclosing context.
2014-10-23 Hristian Kirtchev <kirtchev@adacore.com>
* sinfo.adb (Elaboration_Boolean): Removed.
(Set_Elaboration_Boolean): Removed.
* sinfo.ads Remove attribute Elaboration_Boolean along with its
occurrence in nodes.
(Elaboration_Boolean): Removed along with pragma Inline.
(Set_Elaboration_Boolean): Removed along with pragma Inline.
2014-10-23 Ed Schonberg <schonberg@adacore.com>
* sem_ch3.adb (Constant_Redeclaration): Make error message more
explicit on a deferred constant whose object_definition is an
anonymous array.
2014-10-23 Vincent Celier <celier@adacore.com>
* gnatls.adb: Never call Targparm.Get_Target_Parameters.
2014-10-23 Ed Schonberg <schonberg@adacore.com>
* sem_ch6.adb (Analyze_Expression_Function): In a generic
context do not create a body, and only pre-analyze the expression,
which may include incomplete views.
2014-10-23 Robert Dewar <dewar@adacore.com>
* sem_type.adb: Minor code reorganization (use Nkind_In, Ekind_In).

View File

@ -288,10 +288,12 @@ procedure Gnat1drv is
Validity_Check_In_Out_Params := True;
Validity_Check_In_Params := True;
-- Turn off style check options since we are not interested in any
-- front-end warnings when we are getting CodePeer output.
-- Turn off style check options and ignore any style check pragmas
-- since we are not interested in any front-end warnings when we are
-- getting CodePeer output.
Reset_Style_Check_Options;
Ignore_Style_Checks_Pragmas := True;
-- Always perform semantics and generate ali files in CodePeer mode,
-- so that a gnatmake -c -k will proceed further when possible.

View File

@ -1378,7 +1378,7 @@ in the two situations.
@noindent
Syntax:
@smallexample @c ada
pragma Annotate (IDENTIFIER [,IDENTIFIER @{, ARG@}] [entity => local_NAME]);
pragma Annotate (IDENTIFIER [, IDENTIFIER @{, ARG@}] [, entity => local_NAME]);
ARG ::= NAME | EXPRESSION
@end smallexample

View File

@ -42,7 +42,6 @@ with Sdefault;
with Snames;
with Stringt;
with Switch; use Switch;
with Targparm; use Targparm;
with Types; use Types;
with Ada.Command_Line; use Ada.Command_Line;
@ -1632,13 +1631,6 @@ begin
Osint.Add_Default_Search_Dirs;
-- Get the target parameters, but only if switch -nostdinc was not
-- specified. May not be needed any more, but is harmless.
if not Opt.No_Stdinc then
Get_Target_Parameters;
end if;
if Verbose_Mode then
Write_Eol;
Display_Version ("GNATLS", "1997");

View File

@ -1515,8 +1515,7 @@ package body MLib.Prj is
ALIs.Append (new String'(ALI_Path));
-- Find out if for this ALI file,
-- libgnarl or libdecgnat is
-- necessary.
-- libgnarl is necessary.
Check_Libs (ALI_Path, True);
end if;
@ -2392,8 +2391,8 @@ package body MLib.Prj is
-- Ignore -static and -shared, since -shared will be used
-- in any case.
-- Ignore -lgnat, -lgnarl and -ldecgnat as they will be added
-- later, because they are also needed for non Stand-Alone shared
-- Ignore -lgnat and -lgnarl as they will be added later,
-- because they are also needed for non Stand-Alone shared
-- libraries.
-- Also ignore the shared libraries which are :
@ -2403,12 +2402,8 @@ package body MLib.Prj is
if Next_Line (1 .. Nlast) /= "-static" and then
Next_Line (1 .. Nlast) /= "-shared" and then
Next_Line (1 .. Nlast) /= "-ldecgnat" and then
Next_Line (1 .. Nlast) /= "-lgnarl" and then
Next_Line (1 .. Nlast) /= "-lgnat" and then
Next_Line
(1 .. Natural'Min (Nlast, 10 + Library_Version'Length)) /=
Shared_Lib ("decgnat") and then
Next_Line
(1 .. Natural'Min (Nlast, 8 + Library_Version'Length)) /=
Shared_Lib ("gnarl") and then

View File

@ -4425,14 +4425,16 @@ package body Sem_Ch12 is
Gen_Unit : Entity_Id;
Act_Decl : Node_Id)
is
Vis : Boolean;
Gen_Comp : constant Entity_Id :=
Cunit_Entity (Get_Source_Unit (Gen_Unit));
Curr_Comp : constant Node_Id := Cunit (Current_Sem_Unit);
Curr_Scope : Entity_Id := Empty;
Curr_Unit : constant Entity_Id := Cunit_Entity (Current_Sem_Unit);
Removed : Boolean := False;
Num_Scopes : Int := 0;
Curr_Comp : constant Node_Id := Cunit (Current_Sem_Unit);
Curr_Unit : constant Entity_Id := Cunit_Entity (Current_Sem_Unit);
Gen_Comp : constant Entity_Id :=
Cunit_Entity (Get_Source_Unit (Gen_Unit));
Save_SM : constant SPARK_Mode_Type := SPARK_Mode;
Save_SMP : constant Node_Id := SPARK_Mode_Pragma;
-- Save all SPARK_Mode-related attributes as removing enclosing scopes
-- to provide a clean environment for analysis of the inlined body will
-- eliminate any previously set SPARK_Mode.
Scope_Stack_Depth : constant Int :=
Scope_Stack.Last - Scope_Stack.First + 1;
@ -4440,10 +4442,14 @@ package body Sem_Ch12 is
Use_Clauses : array (1 .. Scope_Stack_Depth) of Node_Id;
Instances : array (1 .. Scope_Stack_Depth) of Entity_Id;
Inner_Scopes : array (1 .. Scope_Stack_Depth) of Entity_Id;
Curr_Scope : Entity_Id := Empty;
List : Elist_Id;
Num_Inner : Int := 0;
Num_Scopes : Int := 0;
N_Instances : Int := 0;
Removed : Boolean := False;
S : Entity_Id;
Vis : Boolean;
begin
-- Case of generic unit defined in another unit. We must remove the
@ -4574,6 +4580,10 @@ package body Sem_Ch12 is
pragma Assert (Num_Inner < Num_Scopes);
-- The inlined package body must be analyzed with the SPARK_Mode of
-- the enclosing context, otherwise the body may cause bogus errors
-- if a configuration SPARK_Mode pragma in in effect.
Push_Scope (Standard_Standard);
Scope_Stack.Table (Scope_Stack.Last).Is_Active_Stack_Base := True;
Instantiate_Package_Body
@ -4587,8 +4597,8 @@ package body Sem_Ch12 is
Version => Ada_Version,
Version_Pragma => Ada_Version_Pragma,
Warnings => Save_Warnings,
SPARK_Mode => SPARK_Mode,
SPARK_Mode_Pragma => SPARK_Mode_Pragma)),
SPARK_Mode => Save_SM,
SPARK_Mode_Pragma => Save_SMP)),
Inlined_Body => True);
Pop_Scope;
@ -4692,7 +4702,9 @@ package body Sem_Ch12 is
end loop;
end;
-- If generic unit is in current unit, current context is correct
-- If generic unit is in current unit, current context is correct. Note
-- that the context is guaranteed to carry the correct SPARK_Mode as no
-- enclosing scopes were removed.
else
Instantiate_Package_Body

View File

@ -11751,6 +11751,20 @@ package body Sem_Ch3 is
Set_Full_View (Prev, Id);
Set_Etype (Id, Any_Type);
-- A deferred constant whose type is an anonymous array is always
-- illegal (unless imported). A detailed error message might be
-- helpful for Ada beginners.
if Nkind (Object_Definition (Parent (Prev)))
= N_Constrained_Array_Definition
and then Nkind (Object_Definition (N))
= N_Constrained_Array_Definition
then
Error_Msg_N ("\each anonymous array is a distinct type", N);
Error_Msg_N ("a deferred constant must have a named type",
Object_Definition (Parent (Prev)));
end if;
elsif
Null_Exclusion_Present (Parent (Prev))
and then not Null_Exclusion_Present (N)

View File

@ -312,8 +312,11 @@ package body Sem_Ch6 is
-- If there are previous overloadable entities with the same name,
-- check whether any of them is completed by the expression function.
-- In a generic context a formal subprogram has no completion.
if Present (Prev) and then Is_Overloadable (Prev) then
if Present (Prev) and then Is_Overloadable (Prev)
and then not Is_Formal_Subprogram (Prev)
then
Def_Id := Analyze_Subprogram_Specification (Spec);
Prev := Find_Corresponding_Spec (N);
end if;
@ -358,7 +361,9 @@ package body Sem_Ch6 is
-- scope. The entity itself may be internally created if within a body
-- to be inlined.
elsif Present (Prev) and then Comes_From_Source (Parent (Prev)) then
elsif Present (Prev) and then Comes_From_Source (Parent (Prev))
and then not Is_Formal_Subprogram (Prev)
then
Set_Has_Completion (Prev, False);
-- An expression function that is a completion freezes the
@ -448,6 +453,28 @@ package body Sem_Ch6 is
end if;
Analyze (N);
-- Within a generic we only need to analyze the expression. The body
-- only needs to be constructed when generating code.
if Inside_A_Generic then
declare
Id : constant Entity_Id := Defining_Entity (N);
Save_In_Spec_Expression : constant Boolean
:= In_Spec_Expression;
begin
Set_Has_Completion (Id);
In_Spec_Expression := True;
Push_Scope (Id);
Install_Formals (Id);
Preanalyze_And_Resolve (Expr, Etype (Id));
End_Scope;
In_Spec_Expression := Save_In_Spec_Expression;
return;
end;
end if;
Set_Is_Inlined (Defining_Entity (N));
-- Establish the linkages between the spec and the body. These are

View File

@ -14894,12 +14894,21 @@ package body Sem_Prag is
when Pragma_Inline =>
-- Inline status is Enabled if inlining option is active
-- Pragma always active unless in GNATprove mode. It is disabled
-- in GNATprove mode because frontend inlining is applied
-- independently of pragmas Inline and Inline_Always for
-- formal verification, see Can_Be_Inlined_In_GNATprove_Mode
-- in inline.ads.
if Inline_Active then
Process_Inline (Enabled);
else
Process_Inline (Disabled);
if not GNATprove_Mode then
-- Inline status is Enabled if inlining option is active
if Inline_Active then
Process_Inline (Enabled);
else
Process_Inline (Disabled);
end if;
end if;
-------------------
@ -14911,15 +14920,15 @@ package body Sem_Prag is
when Pragma_Inline_Always =>
GNAT_Pragma;
-- Pragma always active unless in CodePeer mode. It is disabled
-- in CodePeer mode because inlining is not helpful, and enabling
-- if caused walk order issues.
-- Pragma always active unless in CodePeer mode or GNATprove
-- mode. It is disabled in CodePeer mode because inlining is
-- not helpful, and enabling it caused walk order issues. It
-- is disabled in GNATprove mode because frontend inlining is
-- applied independently of pragmas Inline and Inline_Always for
-- formal verification, see Can_Be_Inlined_In_GNATprove_Mode in
-- inline.ads.
-- Historical note: this pragma used to be disabled in GNATprove
-- mode as well, but that was odd since walk order should not be
-- an issue in that case.
if not CodePeer_Mode then
if not CodePeer_Mode and not GNATprove_Mode then
Process_Inline (Enabled);
end if;

View File

@ -1041,15 +1041,6 @@ package body Sinfo is
return Flag4 (N);
end Elaborate_Present;
function Elaboration_Boolean
(N : Node_Id) return Node_Id is
begin
pragma Assert (False
or else NT (N).Nkind = N_Function_Specification
or else NT (N).Nkind = N_Procedure_Specification);
return Node2 (N);
end Elaboration_Boolean;
function Else_Actions
(N : Node_Id) return List_Id is
begin
@ -4248,15 +4239,6 @@ package body Sinfo is
Set_Flag4 (N, Val);
end Set_Elaborate_Present;
procedure Set_Elaboration_Boolean
(N : Node_Id; Val : Node_Id) is
begin
pragma Assert (False
or else NT (N).Nkind = N_Function_Specification
or else NT (N).Nkind = N_Procedure_Specification);
Set_Node2 (N, Val);
end Set_Elaboration_Boolean;
procedure Set_Else_Actions
(N : Node_Id; Val : List_Id) is
begin

View File

@ -1123,13 +1123,6 @@ package Sinfo is
-- elaboration processing has determined that an Elaborate pragma is
-- desirable for correct elaboration for this unit.
-- Elaboration_Boolean (Node2-Sem)
-- This field is present in function and procedure specification nodes.
-- If set, it points to the entity for a Boolean flag that must be tested
-- for certain calls to check for access before elaboration. See body of
-- Sem_Elab for further details. This field is Empty if no elaboration
-- boolean is required.
-- Else_Actions (List3-Sem)
-- This field is present in if expression nodes. During code
-- expansion we use the Insert_Actions procedure (in Exp_Util) to insert
@ -4895,7 +4888,6 @@ package Sinfo is
-- N_Function_Specification
-- Sloc points to FUNCTION
-- Defining_Unit_Name (Node1) (the designator)
-- Elaboration_Boolean (Node2-Sem)
-- Parameter_Specifications (List3) (set to No_List if no formal part)
-- Null_Exclusion_Present (Flag11)
-- Result_Definition (Node4) for result subtype
@ -4906,7 +4898,6 @@ package Sinfo is
-- N_Procedure_Specification
-- Sloc points to PROCEDURE
-- Defining_Unit_Name (Node1)
-- Elaboration_Boolean (Node2-Sem)
-- Parameter_Specifications (List3) (set to No_List if no formal part)
-- Generic_Parent (Node5-Sem)
-- Null_Present (Flag13) set for null procedure case (Ada 2005 feature)
@ -8963,9 +8954,6 @@ package Sinfo is
function Elaborate_Present
(N : Node_Id) return Boolean; -- Flag4
function Elaboration_Boolean
(N : Node_Id) return Node_Id; -- Node2
function Else_Actions
(N : Node_Id) return List_Id; -- List3
@ -9985,9 +9973,6 @@ package Sinfo is
procedure Set_Elaborate_Present
(N : Node_Id; Val : Boolean := True); -- Flag4
procedure Set_Elaboration_Boolean
(N : Node_Id; Val : Node_Id); -- Node2
procedure Set_Else_Actions
(N : Node_Id; Val : List_Id); -- List3
@ -11510,14 +11495,14 @@ package Sinfo is
N_Function_Specification =>
(1 => True, -- Defining_Unit_Name (Node1)
2 => False, -- Elaboration_Boolean (Node2-Sem)
2 => False, -- unused
3 => True, -- Parameter_Specifications (List3)
4 => True, -- Result_Definition (Node4)
5 => False), -- Generic_Parent (Node5-Sem)
N_Procedure_Specification =>
(1 => True, -- Defining_Unit_Name (Node1)
2 => False, -- Elaboration_Boolean (Node2-Sem)
2 => False, -- unused
3 => True, -- Parameter_Specifications (List3)
4 => False, -- unused
5 => False), -- Generic_Parent (Node5-Sem)
@ -12551,7 +12536,6 @@ package Sinfo is
pragma Inline (Elaborate_All_Desirable);
pragma Inline (Elaborate_All_Present);
pragma Inline (Elaborate_Desirable);
pragma Inline (Elaboration_Boolean);
pragma Inline (Else_Actions);
pragma Inline (Else_Statements);
pragma Inline (Elsif_Parts);
@ -12889,7 +12873,6 @@ package Sinfo is
pragma Inline (Set_Elaborate_All_Present);
pragma Inline (Set_Elaborate_Desirable);
pragma Inline (Set_Elaborate_Present);
pragma Inline (Set_Elaboration_Boolean);
pragma Inline (Set_Else_Actions);
pragma Inline (Set_Else_Statements);
pragma Inline (Set_Elsif_Parts);