aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/errsw.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/errsw.adb')
-rw-r--r--gcc/ada/errsw.adb665
1 files changed, 665 insertions, 0 deletions
diff --git a/gcc/ada/errsw.adb b/gcc/ada/errsw.adb
new file mode 100644
index 0000000..f4c4128
--- /dev/null
+++ b/gcc/ada/errsw.adb
@@ -0,0 +1,665 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT COMPILER COMPONENTS --
+-- --
+-- D I A G N O S T I C S . D I A G N O S T I C S _ R E P O S I T O R Y --
+-- --
+-- B o d y --
+-- --
+-- Copyright (C) 1992-2025, Free Software Foundation, Inc. --
+-- --
+-- 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- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNAT; see file COPYING3. If not, go to --
+-- http://www.gnu.org/licenses for a complete copy of the license. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+with JSON_Utils; use JSON_Utils;
+with Output; use Output;
+
+package body Errsw is
+
+ Switches : constant array (Switch_Id)
+ of Switch_Type :=
+ (No_Switch_Id =>
+ (others => <>),
+ gnatwb =>
+ (Human_Id => new String'("Warn_On_Bad_Fixed_Value"),
+ Status => Active,
+ Short_Name => new String'("gnatwb"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwc =>
+ (Human_Id => new String'("Constant_Condition_Warnings"),
+ Status => Active,
+ Short_Name => new String'("gnatwc"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwd =>
+ -- TODO: is this a subcheck of general gnatwu?
+ (Human_Id => new String'("Warn_On_Dereference"),
+ Status => Active,
+ Short_Name => new String'("gnatwd"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwf =>
+ (Human_Id => new String'("Check_Unreferenced_Formals"),
+ Status => Active,
+ Short_Name => new String'("gnatwf"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwg =>
+ (Human_Id => new String'("Warn_On_Unrecognized_Pragma"),
+ Status => Active,
+ Short_Name => new String'("gnatwg"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwh =>
+ (Human_Id => new String'("Warn_On_Hiding"),
+ Status => Active,
+ Short_Name => new String'("gnatwh"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwi =>
+ (Human_Id => new String'("Implementation_Unit_Warnings"),
+ Status => Active,
+ Short_Name => new String'("gnatwi"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwj =>
+ (Human_Id => new String'("Warn_On_Obsolescent_Feature"),
+ Status => Active,
+ Short_Name => new String'("gnatwj"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwk =>
+ (Human_Id => new String'("Warn_On_Constant"),
+ Status => Active,
+ Short_Name => new String'("gnatwk"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwl =>
+ (Human_Id => new String'("Elab_Warnings"),
+ Status => Active,
+ Short_Name => new String'("gnatwl"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwm =>
+ (Human_Id => new String'("Warn_On_Modified_Unread"),
+ Status => Active,
+ Short_Name => new String'("gnatwm"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwo =>
+ (Human_Id => new String'("Address_Clause_Overlay_Warnings"),
+ Status => Active,
+ Short_Name => new String'("gnatwo"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwp =>
+ (Human_Id => new String'("Ineffective_Inline_Warnings"),
+ Status => Active,
+ Short_Name => new String'("gnatwp"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwq =>
+ (Human_Id => new String'("Warn_On_Questionable_Missing_Parens"),
+ Status => Active,
+ Short_Name => new String'("gnatwq"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwr =>
+ (Human_Id => new String'("Warn_On_Redundant_Constructs"),
+ Status => Active,
+ Short_Name => new String'("gnatwr"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwt =>
+ (Human_Id => new String'("Warn_On_Deleted_Code"),
+ Status => Active,
+ Short_Name => new String'("gnatwt"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwu =>
+ (Human_Id => new String'("Warn_On_Unused_Entities"),
+ Status => Active,
+ Short_Name => new String'("gnatwu"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwv =>
+ (Human_Id => new String'("Warn_On_No_Value_Assigned"),
+ Status => Active,
+ Short_Name => new String'("gnatwv"),
+ Description => null,
+ Documentation_Url => null),
+ gnatww =>
+ (Human_Id => new String'("Warn_On_Assumed_Low_Bound"),
+ Status => Active,
+ Short_Name => new String'("gnatww"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwx =>
+ (Human_Id => new String'("Warn_On_Export_Import"),
+ Status => Active,
+ Short_Name => new String'("gnatwx"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwy =>
+ (Human_Id => new String'("Warn_On_Ada_Compatibility_Issues"),
+ Status => Active,
+ Short_Name => new String'("gnatwy"),
+ Description => null,
+ Documentation_Url => null),
+ gnatwz =>
+ (Human_Id => new String'("Warn_On_Unchecked_Conversion"),
+ Status => Active,
+ Short_Name => new String'("gnatwz"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_a =>
+ (Human_Id => new String'("Warn_On_Assertion_Failure"),
+ Status => Active,
+ Short_Name => new String'("gnatw.a"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_b =>
+ (Human_Id => new String'("Warn_On_Biased_Representation"),
+ Status => Active,
+ Short_Name => new String'("gnatw.b"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_c =>
+ (Human_Id => new String'("Warn_On_Unrepped_Components"),
+ Status => Active,
+ Short_Name => new String'("gnatw.c"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_f =>
+ (Human_Id => new String'("Warn_On_Elab_Access"),
+ Status => Active,
+ Short_Name => new String'("gnatw.f"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_h =>
+ (Human_Id => new String'("Warn_On_Record_Holes"),
+ Status => Active,
+ Short_Name => new String'("gnatw.h"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_i =>
+ (Human_Id => new String'("Warn_On_Overlap"),
+ Status => Active,
+ Short_Name => new String'("gnatw.i"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_j =>
+ (Human_Id => new String'("Warn_On_Late_Primitives"),
+ Status => Active,
+ Short_Name => new String'("gnatw.j"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_k =>
+ (Human_Id => new String'("Warn_On_Standard_Redefinition"),
+ Status => Active,
+ Short_Name => new String'("gnatw.k"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_l =>
+ (Human_Id => new String'("List_Inherited_Aspects"),
+ Status => Active,
+ Short_Name => new String'("gnatw.l"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_m =>
+ (Human_Id => new String'("Warn_On_Suspicious_Modulus_Value"),
+ Status => Active,
+ Short_Name => new String'("gnatw.m"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_n =>
+ (Human_Id => new String'("Warn_On_Atomic_Synchronization"),
+ Status => Active,
+ Short_Name => new String'("gnatw.n"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_o =>
+ (Human_Id => new String'("Warn_On_All_Unread_Out_Parameters"),
+ Status => Active,
+ Short_Name => new String'("gnatw.o"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_p =>
+ (Human_Id => new String'("Warn_On_Parameter_Order"),
+ Status => Active,
+ Short_Name => new String'("gnatw.p"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_q =>
+ (Human_Id => new String'("Warn_On_Questionable_Layout"),
+ Status => Active,
+ Short_Name => new String'("gnatw.q"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_r =>
+ (Human_Id => new String'("Warn_On_Object_Renames_Function"),
+ Status => Active,
+ Short_Name => new String'("gnatw.r"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_s =>
+ (Human_Id => new String'("Warn_On_Overridden_Size"),
+ Status => Active,
+ Short_Name => new String'("gnatw.s"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_t =>
+ (Human_Id => new String'("Warn_On_Suspicious_Contract"),
+ Status => Active,
+ Short_Name => new String'("gnatw.t"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_u =>
+ (Human_Id => new String'("Warn_On_Unordered_Enumeration_Type"),
+ Status => Active,
+ Short_Name => new String'("gnatw.u"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_v =>
+ (Human_Id => new String'("Warn_On_Reverse_Bit_Order"),
+ Status => Active,
+ Short_Name => new String'("gnatw.v"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_w =>
+ (Human_Id => new String'("Warn_On_Warnings_Off"),
+ Status => Active,
+ Short_Name => new String'("gnatw.w"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_x =>
+ (Human_Id =>
+ new String'("Warn_No_Exception_Propagation_Active"),
+ Status => Active,
+ Short_Name => new String'("gnatw.x"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_y =>
+ (Human_Id => new String'("List_Body_Required_Info"),
+ Status => Active,
+ Short_Name => new String'("gnatw.y"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_dot_z =>
+ (Human_Id => new String'("Warn_On_Size_Alignment"),
+ Status => Active,
+ Short_Name => new String'("gnatw.z"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_underscore_a =>
+ (Human_Id => new String'("Warn_On_Anonymous_Allocators"),
+ Status => Active,
+ Short_Name => new String'("gnatw_a"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_underscore_c =>
+ (Human_Id => new String'("Warn_On_Unknown_Compile_Time_Warning"),
+ Status => Active,
+ Short_Name => new String'("gnatw_c"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_underscore_j =>
+ (Human_Id => new String'("Warn_On_Non_Dispatching_Primitives"),
+ Status => Active,
+ Short_Name => new String'("gnatw_j"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_underscore_l =>
+ (Human_Id => new String'("Warn_On_Inherently_Limited_Types"),
+ Status => Active,
+ Short_Name => new String'("gnatw_l"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_underscore_p =>
+ (Human_Id => new String'("Warn_On_Pedantic_Checks"),
+ Status => Active,
+ Short_Name => new String'("gnatw_p"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_underscore_q =>
+ (Human_Id => new String'("Warn_On_Ignored_Equality"),
+ Status => Active,
+ Short_Name => new String'("gnatw_q"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_underscore_r =>
+ (Human_Id => new String'("Warn_On_Component_Order"),
+ Status => Active,
+ Short_Name => new String'("gnatw_r"),
+ Description => null,
+ Documentation_Url => null),
+ gnatw_underscore_s =>
+ (Human_Id => new String'("Warn_On_Ineffective_Predicate_Test"),
+ Status => Active,
+ Short_Name => new String'("gnatw_s"),
+ Description => null,
+ Documentation_Url => null),
+ -- NOTE: this flag is usually followed by a number specfifying the
+ -- indentation level. We encode all of these warnings as -gnaty0
+ -- irregardless of the actual numeric value.
+ gnaty =>
+ (Human_Id => new String'("Style_Check_Indentation_Level"),
+ Status => Active,
+ Short_Name => new String'("gnaty0"),
+ Description => null,
+ Documentation_Url => null),
+ gnatya =>
+ (Human_Id => new String'("Style_Check_Attribute_Casing"),
+ Status => Active,
+ Short_Name => new String'("gnatya"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyaa =>
+ (Human_Id => new String'("Address_Clause_Overlay_Warnings"),
+ Status => Active,
+ Short_Name => new String'("gnatyA"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyb =>
+ (Human_Id => new String'("Style_Check_Blanks_At_End"),
+ Status => Active,
+ Short_Name => new String'("gnatyb"),
+ Description => null,
+ Documentation_Url => null),
+ gnatybb =>
+ -- NOTE: in live documentation it is called "Check Boolean operators"
+ (Human_Id => new String'("Style_Check_Boolean_And_Or"),
+ Status => Active,
+ Short_Name => new String'("gnatyB"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyc =>
+ (Human_Id => new String'("Style_Check_Comments_Double_Space"),
+ Status => Active,
+ Short_Name => new String'("gnatyc"),
+ Description => null,
+ Documentation_Url => null),
+ gnatycc =>
+ (Human_Id => new String'("Style_Check_Comments_Single_Space"),
+ Status => Active,
+ Short_Name => new String'("gnatyC"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyd =>
+ (Human_Id => new String'("Style_Check_DOS_Line_Terminator"),
+ Status => Active,
+ Short_Name => new String'("gnatyd"),
+ Description => null,
+ Documentation_Url => null),
+ gnatydd =>
+ (Human_Id => new String'("Style_Check_Mixed_Case_Decls"),
+ Status => Active,
+ Short_Name => new String'("gnatyD"),
+ Description => null,
+ Documentation_Url => null),
+ gnatye =>
+ (Human_Id => new String'("Style_Check_End_Labels"),
+ Status => Active,
+ Short_Name => new String'("gnatye"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyf =>
+ (Human_Id => new String'("Style_Check_Form_Feeds"),
+ Status => Active,
+ Short_Name => new String'("gnatyf"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyh =>
+ (Human_Id => new String'("Style_Check_Horizontal_Tabs"),
+ Status => Active,
+ Short_Name => new String'("gnatyh"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyi =>
+ (Human_Id => new String'("Style_Check_If_Then_Layout"),
+ Status => Active,
+ Short_Name => new String'("gnatyi"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyii =>
+ (Human_Id => new String'("Style_Check_Mode_In"),
+ Status => Active,
+ Short_Name => new String'("gnatyI"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyk =>
+ (Human_Id => new String'("Style_Check_Keyword_Casing"),
+ Status => Active,
+ Short_Name => new String'("gnatyk"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyl =>
+ (Human_Id => new String'("Style_Check_Layout"),
+ Status => Active,
+ Short_Name => new String'("gnatyl"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyll =>
+ (Human_Id => new String'("Style_Check_Max_Nesting_Level"),
+ Status => Active,
+ Short_Name => new String'("gnatyL"),
+ Description => null,
+ Documentation_Url => null),
+ gnatym =>
+ (Human_Id => new String'("Style_Check_Max_Line_Length"),
+ Status => Active,
+ Short_Name => new String'("gnatym"),
+ Description => null,
+ Documentation_Url => null),
+ gnatymm =>
+ -- TODO: May contain line length
+ (Human_Id => new String'("Style_Check_Max_Line_Length"),
+ Status => Active,
+ Short_Name => new String'("gnatyM"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyn =>
+ (Human_Id => new String'("Style_Check_Standard"),
+ Status => Active,
+ Short_Name => new String'("gnatyn"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyo =>
+ (Human_Id => new String'("Style_Check_Order_Subprograms"),
+ Status => Active,
+ Short_Name => new String'("gnatyo"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyoo =>
+ (Human_Id => new String'("Style_Check_Missing_Overriding"),
+ Status => Active,
+ Short_Name => new String'("gnatyO"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyp =>
+ (Human_Id => new String'("Style_Check_Pragma_Casing"),
+ Status => Active,
+ Short_Name => new String'("gnatyp"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyr =>
+ (Human_Id => new String'("Style_Check_References"),
+ Status => Active,
+ Short_Name => new String'("gnatyr"),
+ Description => null,
+ Documentation_Url => null),
+ gnatys =>
+ (Human_Id => new String'("Style_Check_Specs"),
+ Status => Active,
+ Short_Name => new String'("gnatys"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyss =>
+ (Human_Id => new String'("Style_Check_Separate_Stmt_Lines"),
+ Status => Active,
+ Short_Name => new String'("gnatyS"),
+ Description => null,
+ Documentation_Url => null),
+ gnatytt =>
+ (Human_Id => new String'("Style_Check_Tokens"),
+ Status => Active,
+ Short_Name => new String'("gnatyt"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyu =>
+ (Human_Id => new String'("Style_Check_Blank_Lines"),
+ Status => Active,
+ Short_Name => new String'("gnatyu"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyx =>
+ (Human_Id => new String'("Style_Check_Xtra_Parens"),
+ Status => Active,
+ Short_Name => new String'("gnatyx"),
+ Description => null,
+ Documentation_Url => null),
+ gnatyz =>
+ (Human_Id => new String'("Style_Check_Xtra_Parens_Precedence"),
+ Status => Active,
+ Short_Name => new String'("gnatyz"),
+ Description => null,
+ Documentation_Url => null),
+ gnatel =>
+ (Human_Id => new String'("Display_Elaboration_Messages"),
+ Status => Active,
+ Short_Name => new String'("gnatel"),
+ Description => null,
+ Documentation_Url => null)
+ );
+
+ ----------------
+ -- Get_Switch --
+ ----------------
+
+ function Get_Switch (Id : Switch_Id) return Switch_Type is
+
+ begin
+ return Switches (Id);
+ end Get_Switch;
+
+ -------------------
+ -- Get_Switch_Id --
+ -------------------
+
+ function Get_Switch_Id (Name : String) return Switch_Id is
+ Trimmed_Name : constant String :=
+ (if Name (Name'Last) = ' ' then Name (Name'First .. Name'Last - 1)
+ else Name);
+ begin
+ for I in Active_Switch_Id loop
+ if Switches (I).Short_Name.all = Trimmed_Name then
+ return I;
+ end if;
+ end loop;
+
+ return No_Switch_Id;
+ end Get_Switch_Id;
+
+ -----------------------------
+ -- Print_Switch_Repository --
+ -----------------------------
+
+ procedure Print_Switch_Repository is
+ First : Boolean := True;
+ begin
+ Write_Char ('{');
+ Begin_Block;
+ NL_And_Indent;
+
+ Write_Str ("""" & "Switches" & """" & ": " & "[");
+ Begin_Block;
+
+ -- Avoid printing the first switch, which is a placeholder
+
+ for I in Active_Switch_Id loop
+
+ if First then
+ First := False;
+ else
+ Write_Char (',');
+ end if;
+
+ NL_And_Indent;
+
+ Write_Char ('{');
+ Begin_Block;
+ NL_And_Indent;
+
+ if Switches (I).Human_Id /= null then
+ Write_String_Attribute ("Human_Id", Switches (I).Human_Id.all);
+ else
+ Write_String_Attribute ("Human_Id", "null");
+ end if;
+
+ Write_Char (',');
+ NL_And_Indent;
+
+ if Switches (I).Short_Name /= null then
+ Write_String_Attribute ("Short_Name", Switches (I).Short_Name.all);
+ else
+ Write_String_Attribute ("Short_Name", "null");
+ end if;
+
+ Write_Char (',');
+ NL_And_Indent;
+
+ if Switches (I).Status = Active then
+ Write_String_Attribute ("Status", "Active");
+ else
+ Write_String_Attribute ("Status", "Deprecated");
+ end if;
+
+ Write_Char (',');
+ NL_And_Indent;
+
+ if Switches (I).Description /= null then
+ Write_String_Attribute ("Description",
+ Switches (I).Description.all);
+ else
+ Write_String_Attribute ("Description", "null");
+ end if;
+
+ Write_Char (',');
+ NL_And_Indent;
+
+ if Switches (I).Description /= null then
+ Write_String_Attribute ("Documentation_Url",
+ Switches (I).Description.all);
+ else
+ Write_String_Attribute ("Documentation_Url", "null");
+ end if;
+
+ End_Block;
+ NL_And_Indent;
+ Write_Char ('}');
+ end loop;
+
+ End_Block;
+ NL_And_Indent;
+ Write_Char (']');
+
+ End_Block;
+ NL_And_Indent;
+ Write_Char ('}');
+
+ Write_Eol;
+ end Print_Switch_Repository;
+
+end Errsw;