[multiple changes]
2014-06-13 Hristian Kirtchev <kirtchev@adacore.com> * errout.adb (SPARK_Msg_N): New routine. (SPARK_Msg_NE): New routine. * errout.ads Add a section on SPARK-related error routines. (SPARK_Msg_N): New routine. (SPARK_Msg_NE): New routine. * sem_ch13.adb (Analyze_Aspect_Specifications): Ensure that pragma Abstract_State is always inserted after SPARK_Mode. (Insert_After_SPARK_Mode): New routine. * sem_prag.adb (Analyze_Abstract_State, Analyze_Constituent, Analyze_External_Property, Analyze_External_Property_In_Decl_Part, Analyze_Global_Item, Analyze_Global_List, Analyze_Initialization_Item, Analyze_Initialization_Item_With_Inputs, Analyze_Input_Item, Analyze_Input_List, Analyze_Input_Output, Analyze_Part_Of, Analyze_Pragma, Analyze_Refined_Depends_In_Decl_Part, Analyze_Refined_Global_In_Decl_Part, Analyze_Refined_State_In_Decl_Part, Analyze_Refinement_Clause, Check_Aspect_Specification_Order, Check_Constituent_Usage, Check_Declaration_Order, Check_Dependency_Clause, Check_Duplicate_Mode, Check_Duplicate_Option, Check_Duplicate_Property, Check_External_Properties, Check_External_Property, Check_Function_Return, Check_Matching_Constituent, Check_Matching_State, Check_Mode_Restriction_In_Enclosing_Context, Check_Mode_Restriction_In_Function, Check_Refined_Global_Item, Check_State_And_Constituent_Use, Create_Or_Modify_Clause, Has_Extra_Parentheses, Inconsistent_Mode_Error, Match_Error, Propagate_Part_Of, Report_Extra_Clauses, Report_Extra_Constituents_In_List, Report_Extra_Inputs, Report_Unrefined_States, Report_Unused_Constituents, Report_Unused_States, Role_Error, Usage_Error): Convert Error_Msg_XXX calls to SPARK_Msg_XXX calls to report semantic errors only when SPARK_Mode is on. (Analyze_Depends_In_Decl_Part): Do not check the syntax of pragma Depends explicitly, this is now done by the analysis. (Analyze_Global_In_Decl_List): Do not check the syntax of pragma Global explicitly, this is now done by the analysis. (Analyze_Initializes_In_Decl_Part): Do not check the syntax of pragma Initializes explicitly, this is now done by the analysis. (Analyze_Part_Of): Do not check the syntax of the encapsulating state, this is now done by the analysis. (Analyze_Pragma): Do not check the syntax of a state declaration, this is now done by the analysis. (Analyze_Refined_Depends_In_Decl_Part): Do not check the syntax of pragma Refined_Depends explicitly, this is now done by the analysis. (Analyze_Refined_Global_In_Decl_Part): Do not check the syntax of pragma Refined_Global explicitly, this is now done by the analysis. (Analyze_Refined_State_In_Decl_Part): Do not check the syntax of pragma Refined_State explicitly, this is now done by the analysis. (Check_Dependence_List_Syntax): Removed. (Check_Global_List_Syntax): Removed. (Check_Initialization_List_Syntax): Removed. (Check_Item_Syntax): Removed. (Check_Missing_Part_Of): Do not consider items from an instance. (Check_Refinement_List_Syntax): Removed. (Check_State_Declaration_Syntax): Removed. (Collect_Global_List): Do not raise Program_Error when the input is malformed. (Process_Global_List): Do not raise Program_Error when the input is malformed. * sem_ch13.adb: Minor reformatting. 2014-06-13 Ed Schonberg <schonberg@adacore.com> * sem_ch3.adb (Find_Type_Name): Diagnose a private type completion that is an interface definition with an interface list. (Process_Full_View): Move error message on missmatched interfaces between views to the declaration of full view, for clarity. * sem_ch9.adb (Check_Interfaces): Move error message to full view, for clarity. From-SVN: r211626
This commit is contained in:
parent
6aa4c5b68d
commit
d2adb45e35
|
@ -1,3 +1,79 @@
|
|||
2014-06-13 Hristian Kirtchev <kirtchev@adacore.com>
|
||||
|
||||
* errout.adb (SPARK_Msg_N): New routine.
|
||||
(SPARK_Msg_NE): New routine.
|
||||
* errout.ads Add a section on SPARK-related error routines.
|
||||
(SPARK_Msg_N): New routine.
|
||||
(SPARK_Msg_NE): New routine.
|
||||
* sem_ch13.adb (Analyze_Aspect_Specifications): Ensure that
|
||||
pragma Abstract_State is always inserted after SPARK_Mode.
|
||||
(Insert_After_SPARK_Mode): New routine.
|
||||
* sem_prag.adb (Analyze_Abstract_State,
|
||||
Analyze_Constituent, Analyze_External_Property,
|
||||
Analyze_External_Property_In_Decl_Part, Analyze_Global_Item,
|
||||
Analyze_Global_List, Analyze_Initialization_Item,
|
||||
Analyze_Initialization_Item_With_Inputs, Analyze_Input_Item,
|
||||
Analyze_Input_List, Analyze_Input_Output, Analyze_Part_Of,
|
||||
Analyze_Pragma, Analyze_Refined_Depends_In_Decl_Part,
|
||||
Analyze_Refined_Global_In_Decl_Part,
|
||||
Analyze_Refined_State_In_Decl_Part, Analyze_Refinement_Clause,
|
||||
Check_Aspect_Specification_Order, Check_Constituent_Usage,
|
||||
Check_Declaration_Order, Check_Dependency_Clause,
|
||||
Check_Duplicate_Mode, Check_Duplicate_Option,
|
||||
Check_Duplicate_Property, Check_External_Properties,
|
||||
Check_External_Property, Check_Function_Return,
|
||||
Check_Matching_Constituent, Check_Matching_State,
|
||||
Check_Mode_Restriction_In_Enclosing_Context,
|
||||
Check_Mode_Restriction_In_Function, Check_Refined_Global_Item,
|
||||
Check_State_And_Constituent_Use, Create_Or_Modify_Clause,
|
||||
Has_Extra_Parentheses, Inconsistent_Mode_Error,
|
||||
Match_Error, Propagate_Part_Of, Report_Extra_Clauses,
|
||||
Report_Extra_Constituents_In_List, Report_Extra_Inputs,
|
||||
Report_Unrefined_States, Report_Unused_Constituents,
|
||||
Report_Unused_States, Role_Error, Usage_Error):
|
||||
Convert Error_Msg_XXX calls to SPARK_Msg_XXX calls
|
||||
to report semantic errors only when SPARK_Mode is on.
|
||||
(Analyze_Depends_In_Decl_Part): Do not check the syntax of
|
||||
pragma Depends explicitly, this is now done by the analysis.
|
||||
(Analyze_Global_In_Decl_List): Do not check the syntax of
|
||||
pragma Global explicitly, this is now done by the analysis.
|
||||
(Analyze_Initializes_In_Decl_Part): Do not check the syntax of
|
||||
pragma Initializes explicitly, this is now done by the analysis.
|
||||
(Analyze_Part_Of): Do not check the syntax of the encapsulating
|
||||
state, this is now done by the analysis.
|
||||
(Analyze_Pragma): Do
|
||||
not check the syntax of a state declaration, this is now done
|
||||
by the analysis.
|
||||
(Analyze_Refined_Depends_In_Decl_Part): Do not
|
||||
check the syntax of pragma Refined_Depends explicitly, this is now
|
||||
done by the analysis.
|
||||
(Analyze_Refined_Global_In_Decl_Part): Do
|
||||
not check the syntax of pragma Refined_Global explicitly, this is
|
||||
now done by the analysis.
|
||||
(Analyze_Refined_State_In_Decl_Part):
|
||||
Do not check the syntax of pragma Refined_State explicitly, this
|
||||
is now done by the analysis.
|
||||
(Check_Dependence_List_Syntax): Removed.
|
||||
(Check_Global_List_Syntax): Removed.
|
||||
(Check_Initialization_List_Syntax): Removed.
|
||||
(Check_Item_Syntax): Removed.
|
||||
(Check_Missing_Part_Of): Do not consider items from an instance.
|
||||
(Check_Refinement_List_Syntax): Removed.
|
||||
(Check_State_Declaration_Syntax): Removed.
|
||||
(Collect_Global_List): Do not raise Program_Error when the input is
|
||||
malformed.
|
||||
(Process_Global_List): Do not raise Program_Error when the input
|
||||
is malformed.
|
||||
* sem_ch13.adb: Minor reformatting.
|
||||
2014-06-13 Ed Schonberg <schonberg@adacore.com>
|
||||
|
||||
* sem_ch3.adb (Find_Type_Name): Diagnose a private type completion
|
||||
that is an interface definition with an interface list.
|
||||
(Process_Full_View): Move error message on missmatched interfaces
|
||||
between views to the declaration of full view, for clarity.
|
||||
* sem_ch9.adb (Check_Interfaces): Move error message to full view,
|
||||
for clarity.
|
||||
|
||||
2014-06-13 Robert Dewar <dewar@adacore.com>
|
||||
|
||||
* exp_attr.adb (Expand_N_Attribute_Reference, case Pred/Succ): Change
|
||||
|
|
|
@ -3065,6 +3065,32 @@ package body Errout is
|
|||
return False;
|
||||
end Special_Msg_Delete;
|
||||
|
||||
-----------------
|
||||
-- SPARK_Msg_N --
|
||||
-----------------
|
||||
|
||||
procedure SPARK_Msg_N (Msg : String; N : Node_Or_Entity_Id) is
|
||||
begin
|
||||
if SPARK_Mode = On then
|
||||
Error_Msg_N (Msg, N);
|
||||
end if;
|
||||
end SPARK_Msg_N;
|
||||
|
||||
------------------
|
||||
-- SPARK_Msg_NE --
|
||||
------------------
|
||||
|
||||
procedure SPARK_Msg_NE
|
||||
(Msg : String;
|
||||
N : Node_Or_Entity_Id;
|
||||
E : Node_Or_Entity_Id)
|
||||
is
|
||||
begin
|
||||
if SPARK_Mode = On then
|
||||
Error_Msg_NE (Msg, N, E);
|
||||
end if;
|
||||
end SPARK_Msg_NE;
|
||||
|
||||
--------------------------
|
||||
-- Unwind_Internal_Type --
|
||||
--------------------------
|
||||
|
|
|
@ -908,6 +908,29 @@ package Errout is
|
|||
procedure dmsg (Id : Error_Msg_Id) renames Erroutc.dmsg;
|
||||
-- Debugging routine to dump an error message
|
||||
|
||||
------------------------------------
|
||||
-- SPARK Error Output Subprograms --
|
||||
------------------------------------
|
||||
|
||||
-- The following routines are intended to report semantic errors in SPARK
|
||||
-- constructs subject to aspect/pragma SPARK_Mode. Note that syntax errors
|
||||
-- must be reported using the Error_Msg_XXX routines. This allows for the
|
||||
-- partial analysis of SPARK features when they are disabled via SPARK_Mode
|
||||
-- set to "off".
|
||||
|
||||
procedure SPARK_Msg_N (Msg : String; N : Node_Or_Entity_Id);
|
||||
pragma Inline (SPARK_Msg_N);
|
||||
-- Same as Error_Msg_N, but the error is reported only when SPARK_Mode is
|
||||
-- "on". The routine is inlined because it acts as a simple wrapper.
|
||||
|
||||
procedure SPARK_Msg_NE
|
||||
(Msg : String;
|
||||
N : Node_Or_Entity_Id;
|
||||
E : Node_Or_Entity_Id);
|
||||
pragma Inline (SPARK_Msg_NE);
|
||||
-- Same as Error_Msg_NE, but the error is reported only when SPARK_Mode is
|
||||
-- "on". The routine is inlined because it acts as a simple wrapper.
|
||||
|
||||
------------------------------------
|
||||
-- Utility Interface for Back End --
|
||||
------------------------------------
|
||||
|
|
|
@ -2007,10 +2007,51 @@ package body Sem_Ch13 is
|
|||
-- immediately.
|
||||
|
||||
when Aspect_Abstract_State => Abstract_State : declare
|
||||
procedure Insert_After_SPARK_Mode
|
||||
(Ins_Nod : Node_Id;
|
||||
Decls : List_Id);
|
||||
-- Insert Aitem before node Ins_Nod. If Ins_Nod denotes
|
||||
-- pragma SPARK_Mode, then SPARK_Mode is skipped. Decls is
|
||||
-- the associated declarative list where Aitem is to reside.
|
||||
|
||||
-----------------------------
|
||||
-- Insert_After_SPARK_Mode --
|
||||
-----------------------------
|
||||
|
||||
procedure Insert_After_SPARK_Mode
|
||||
(Ins_Nod : Node_Id;
|
||||
Decls : List_Id)
|
||||
is
|
||||
Decl : Node_Id := Ins_Nod;
|
||||
|
||||
begin
|
||||
-- Skip SPARK_Mode
|
||||
|
||||
if Present (Decl)
|
||||
and then Nkind (Decl) = N_Pragma
|
||||
and then Pragma_Name (Decl) = Name_SPARK_Mode
|
||||
then
|
||||
Decl := Next (Decl);
|
||||
end if;
|
||||
|
||||
if Present (Decl) then
|
||||
Insert_Before (Decl, Aitem);
|
||||
|
||||
-- Aitem acts as the last declaration
|
||||
|
||||
else
|
||||
Append_To (Decls, Aitem);
|
||||
end if;
|
||||
end Insert_After_SPARK_Mode;
|
||||
|
||||
-- Local variables
|
||||
|
||||
Context : Node_Id := N;
|
||||
Decl : Node_Id;
|
||||
Decls : List_Id;
|
||||
|
||||
-- Start of processing for Abstract_State
|
||||
|
||||
begin
|
||||
-- When aspect Abstract_State appears on a generic package,
|
||||
-- it is propageted to the package instance. The context in
|
||||
|
@ -2061,17 +2102,20 @@ package body Sem_Ch13 is
|
|||
Decl := Next (Decl);
|
||||
end loop;
|
||||
|
||||
if Present (Decl) then
|
||||
Insert_Before (Decl, Aitem);
|
||||
else
|
||||
Append_To (Decls, Aitem);
|
||||
end if;
|
||||
-- Pragma Abstract_State must be inserted after
|
||||
-- pragma SPARK_Mode in the tree. This ensures that
|
||||
-- any error messages dependent on SPARK_Mode will
|
||||
-- be properly enabled/suppressed.
|
||||
|
||||
Insert_After_SPARK_Mode (Decl, Decls);
|
||||
|
||||
-- The related package is not a generic instance, the
|
||||
-- corresponding pragma must be the first declaration.
|
||||
-- corresponding pragma must be the first declaration
|
||||
-- except when SPARK_Mode is already in the list. In
|
||||
-- that case pragma Abstract_State is placed second.
|
||||
|
||||
else
|
||||
Prepend_To (Decls, Aitem);
|
||||
Insert_After_SPARK_Mode (First (Decls), Decls);
|
||||
end if;
|
||||
|
||||
-- Otherwise the pragma forms a new declarative list
|
||||
|
|
|
@ -15599,8 +15599,10 @@ package body Sem_Ch3 is
|
|||
|
||||
elsif Nkind (N) = N_Full_Type_Declaration
|
||||
and then
|
||||
Nkind (Type_Definition (N)) = N_Record_Definition
|
||||
and then Interface_Present (Type_Definition (N))
|
||||
(Nkind (Type_Definition (N)) = N_Record_Definition
|
||||
or else Nkind (Type_Definition (N))
|
||||
= N_Derived_Type_Definition)
|
||||
and then Interface_Present (Type_Definition (N))
|
||||
then
|
||||
Error_Msg_N
|
||||
("completion of private type cannot be an interface", N);
|
||||
|
@ -18307,8 +18309,8 @@ package body Sem_Ch3 is
|
|||
|
||||
if Present (Iface) then
|
||||
Error_Msg_NE
|
||||
("interface & not implemented by full type " &
|
||||
"(RM-2005 7.3 (7.3/2))", Priv_T, Iface);
|
||||
("interface in partial view& not implemented by full type " &
|
||||
"(RM-2005 7.3 (7.3/2))", Full_T, Iface);
|
||||
end if;
|
||||
|
||||
Iface := Find_Hidden_Interface (Full_T_Ifaces, Priv_T_Ifaces);
|
||||
|
|
|
@ -3327,8 +3327,8 @@ package body Sem_Ch9 is
|
|||
|
||||
if Present (Iface) then
|
||||
Error_Msg_NE
|
||||
("interface & not implemented by full type " &
|
||||
"(RM-2005 7.3 (7.3/2))", Priv_T, Iface);
|
||||
("interface in partial view& not implemented by full "
|
||||
& "type (RM-2005 7.3 (7.3/2))", T, Iface);
|
||||
end if;
|
||||
|
||||
Iface := Find_Hidden_Interface (Full_T_Ifaces, Priv_T_Ifaces);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue