[Ada] Improve error message on Extensions_Visible
Arnaud Charlet
charlet@adacore.com
Tue Jun 14 12:20:00 GMT 2016
This patch changes the formatting of errors related to the pragma
Extensions_Visible so as not to suggest Extensions_Visible applies to a formal
parameters instead of a subprogram when SPARK RM 6.1.7(3) is violated. In
addition, a small change to sem_prag was made to make the printing of boolean
values consistent accross all error messages.
------------
-- Source --
------------
-- ext_vis_error.ads
package Ext_Vis_Error with SPARK_Mode is
type Root is tagged record
Comp_1 : Integer := 1;
end record;
type Child is new Root with record
Comp_2 : Integer := 2;
end record;
procedure Proc_1 (Obj_C : Child) with Extensions_Visible => False;
procedure Proc_2 (Obj_C : Child) with Extensions_Visible => True;
end Ext_Vis_Error;
-- ext_vis_error.adb
package body Ext_Vis_Error with SPARK_Mode is
procedure Proc_1 (Obj_C : Child) is
Error_1 : constant Root'Class := Obj_C;
Error_2 : constant Root'Class := Root'Class (Obj_C);
begin
Proc_2 (Obj_C);
end Proc_1;
procedure Proc_2 (Obj_C : Child) is begin null; end Proc_2;
end Ext_Vis_Error;
----------------------------
-- Compilation and output --
----------------------------
gcc -c ext_vis_error.adb
gcc -c ext_vis_error.adb -gnatd.F
ext_vis_error.adb:3:40: formal parameter cannot be implicitly converted to
class-wide type when Extensions_Visible is False
ext_vis_error.adb:4:52: formal parameter cannot be converted to class-wide
type when Extensions_Visible is False
ext_vis_error.adb:7:15: formal parameter cannot act as actual parameter when
Extensions_Visible is False
ext_vis_error.adb:7:15: subprogram "Proc_2" has Extensions_Visible True
ext_vis_error.adb:3:40: formal parameter cannot be implicitly converted to
class-wide type when Extensions_Visible is False
ext_vis_error.adb:4:52: formal parameter cannot be converted to class-wide
type when Extensions_Visible is False
ext_vis_error.adb:7:15: formal parameter cannot act as actual parameter when
Extensions_Visible is False
ext_vis_error.adb:7:15: subprogram "Proc_2" has Extensions_Visible True
Tested on x86_64-pc-linux-gnu, committed on trunk
2016-06-14 Justin Squirek <squirek@adacore.com>
* sem_ch3.adb (Analyze_Object_Declaration): Fix formatting
of error output related to SPARK RM 6.1.7(3) and pragma
Extensions_Visible.
* sem_ch4.adb (Analyze_Type_Conversion): Fix formatting of error
output related to SPARK RM 6.1.7(3) and pragma Extensions_Visible.
* sem_prag.adb (Analyze_Pragma): Fix formatting of error output
related to SPARK RM 7.1.2(15) and pragma Volatile_Function
so that the values True and False are no longer surrounded by
double quotes.
* sem_res.adb (Resolve_Actuals): Fix formatting of error output
related to SPARK RM 6.1.7(3) and pragma Extensions_Visible.
-------------- next part --------------
Index: sem_ch3.adb
===================================================================
--- sem_ch3.adb (revision 237429)
+++ sem_ch3.adb (working copy)
@@ -3796,8 +3796,8 @@
and then Is_EVF_Expression (E)
then
Error_Msg_N
- ("formal parameter with Extensions_Visible False cannot be "
- & "implicitly converted to class-wide type", E);
+ ("formal parameter cannot be implicitly converted to "
+ & "class-wide type when Extensions_Visible is False", E);
end if;
end if;
Index: sem_prag.adb
===================================================================
--- sem_prag.adb (revision 237429)
+++ sem_prag.adb (working copy)
@@ -22821,12 +22821,12 @@
Error_Msg_Sloc := Sloc (Over_Id);
Error_Msg_N
- ("\& declared # with Volatile_Function value `False`",
+ ("\& declared # with Volatile_Function value False",
Spec_Id);
Error_Msg_Sloc := Sloc (Spec_Id);
Error_Msg_N
- ("\overridden # with Volatile_Function value `True`",
+ ("\overridden # with Volatile_Function value True",
Spec_Id);
end if;
Index: sem_res.adb
===================================================================
--- sem_res.adb (revision 237432)
+++ sem_res.adb (working copy)
@@ -4596,8 +4596,8 @@
Extensions_Visible_True
then
Error_Msg_N
- ("formal parameter with Extensions_Visible False cannot act "
- & "as actual parameter", A);
+ ("formal parameter cannot act as actual parameter when "
+ & "Extensions_Visible is False", A);
Error_Msg_NE
("\subprogram & has Extensions_Visible True", A, Nam);
end if;
Index: sem_ch4.adb
===================================================================
--- sem_ch4.adb (revision 237429)
+++ sem_ch4.adb (working copy)
@@ -5246,8 +5246,8 @@
and then Is_EVF_Expression (Expr)
then
Error_Msg_N
- ("formal parameter with Extensions_Visible False cannot be "
- & "converted to class-wide type", Expr);
+ ("formal parameter cannot be converted to class-wide type when "
+ & "Extensions_Visible is False", Expr);
end if;
end Analyze_Type_Conversion;
More information about the Gcc-patches
mailing list