aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2022-05-19 20:42:42 +0200
committerPierre-Marie de Rodat <derodat@adacore.com>2022-07-05 08:28:21 +0000
commit5a387a2b8f58a238acfea6ec820a0fd44057a09a (patch)
tree364ba52f6b4ac37a9e14d97ba2ae598f1755ea61
parentd2672ffea0a478b265f5ed0239723c8ba54e8d24 (diff)
downloadgcc-5a387a2b8f58a238acfea6ec820a0fd44057a09a.zip
gcc-5a387a2b8f58a238acfea6ec820a0fd44057a09a.tar.gz
gcc-5a387a2b8f58a238acfea6ec820a0fd44057a09a.tar.bz2
[Ada] Warn about obsolete uses of renamed Ada 83 packages
Ada 83 packages like Unchecked_Conversion or Text_IO are obsolete since Ada 95. GNAT now warns about their uses when warnings on obsolescent featured (Annex J) is active. gcc/ada/ * doc/gnat_ugn/building_executable_programs_with_gnat.rst (Warning Message Control): Update description of switch -gnatwj. * gnat_ugn.texi: Regenerate. * sem_ch10.adb (Analyze_With_Clause): Warn on WITH clauses for obsolete renamed units; in Ada 83 mode do not consider predefined renamings to be obsolete. gcc/testsuite/ * gnat.dg/renaming1.adb: Update WITH clause. * gnat.dg/renaming1.ads: Likewise. * gnat.dg/warn29.adb: Likewise.
-rw-r--r--gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst3
-rw-r--r--gcc/ada/gnat_ugn.texi3
-rw-r--r--gcc/ada/sem_ch10.adb12
-rw-r--r--gcc/testsuite/gnat.dg/renaming1.adb8
-rw-r--r--gcc/testsuite/gnat.dg/renaming1.ads4
-rw-r--r--gcc/testsuite/gnat.dg/warn29.adb2
6 files changed, 19 insertions, 13 deletions
diff --git a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
index 2e835f2..c0eeca4 100644
--- a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
+++ b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
@@ -3277,8 +3277,7 @@ of the pragma in the :title:`GNAT_Reference_manual`).
If this warning option is activated, then warnings are generated for
calls to subprograms marked with ``pragma Obsolescent`` and
for use of features in Annex J of the Ada Reference Manual. In the
- case of Annex J, not all features are flagged. In particular use
- of the renamed packages (like ``Text_IO``) and use of package
+ case of Annex J, not all features are flagged. In particular, uses of package
``ASCII`` are not flagged, since these are very common and
would generate many annoying positive warnings. The default is that
such warnings are not generated.
diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi
index a080cd4..cfd9a87 100644
--- a/gcc/ada/gnat_ugn.texi
+++ b/gcc/ada/gnat_ugn.texi
@@ -11383,8 +11383,7 @@ This switch disables warnings on overlapping actuals in a call.
If this warning option is activated, then warnings are generated for
calls to subprograms marked with @code{pragma Obsolescent} and
for use of features in Annex J of the Ada Reference Manual. In the
-case of Annex J, not all features are flagged. In particular use
-of the renamed packages (like @code{Text_IO}) and use of package
+case of Annex J, not all features are flagged. In particular, uses of package
@code{ASCII} are not flagged, since these are very common and
would generate many annoying positive warnings. The default is that
such warnings are not generated.
diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb
index 9b9a9f1..8c1c00c 100644
--- a/gcc/ada/sem_ch10.adb
+++ b/gcc/ada/sem_ch10.adb
@@ -2597,11 +2597,19 @@ package body Sem_Ch10 is
-- Note: this is not quite right if the user defines one of these units
-- himself, but that's a marginal case, and fixing it is hard ???
- if Restriction_Check_Required (No_Obsolescent_Features) then
- if In_Predefined_Renaming (U) then
+ if Ada_Version >= Ada_95
+ and then In_Predefined_Renaming (U)
+ then
+ if Restriction_Check_Required (No_Obsolescent_Features) then
Check_Restriction (No_Obsolescent_Features, N);
Restriction_Violation := True;
end if;
+
+ if Warn_On_Obsolescent_Feature then
+ Error_Msg_N
+ ("renamed predefined unit is an obsolescent feature "
+ & "(RM J.1)?j?", N);
+ end if;
end if;
-- Check No_Implementation_Units violation
diff --git a/gcc/testsuite/gnat.dg/renaming1.adb b/gcc/testsuite/gnat.dg/renaming1.adb
index d033c9a..c85e50a 100644
--- a/gcc/testsuite/gnat.dg/renaming1.adb
+++ b/gcc/testsuite/gnat.dg/renaming1.adb
@@ -1,12 +1,12 @@
-- { dg-do compile}
-- { dg-options "-gnatwa" }
-with Text_IO;
-use Text_IO;
+with Ada.Text_IO;
+use Ada.Text_IO;
package body renaming1 is
- procedure Fo (A : Text_IO.File_Access) is
+ procedure Fo (A : Ada.Text_IO.File_Access) is
begin
- if A = Text_IO.Standard_Output then
+ if A = Ada.Text_IO.Standard_Output then
null;
end if;
end Fo;
diff --git a/gcc/testsuite/gnat.dg/renaming1.ads b/gcc/testsuite/gnat.dg/renaming1.ads
index 893f423..fba216a 100644
--- a/gcc/testsuite/gnat.dg/renaming1.ads
+++ b/gcc/testsuite/gnat.dg/renaming1.ads
@@ -1,4 +1,4 @@
-with Text_IO;
+with Ada.Text_IO;
package renaming1 is
- procedure Fo (A : Text_IO.File_Access);
+ procedure Fo (A : Ada.Text_IO.File_Access);
end;
diff --git a/gcc/testsuite/gnat.dg/warn29.adb b/gcc/testsuite/gnat.dg/warn29.adb
index ec3b9ee..eeb3a89 100644
--- a/gcc/testsuite/gnat.dg/warn29.adb
+++ b/gcc/testsuite/gnat.dg/warn29.adb
@@ -1,7 +1,7 @@
-- { dg-do compile }
-- { dg-options "-gnatwa" }
-with Text_IO; use Text_IO;
+with Ada.Text_IO; use Ada.Text_IO;
package body Warn29 is
procedure P (X : T; Y : Integer) is