File : warnsw.adb


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT COMPILER COMPONENTS                         --
   4 --                                                                          --
   5 --                               W A R N S W                                --
   6 --                                                                          --
   7 --                                 B o d y                                  --
   8 --                                                                          --
   9 --          Copyright (C) 1999-2014, Free Software Foundation, Inc.         --
  10 --                                                                          --
  11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  12 -- terms of the  GNU General Public License as published  by the Free Soft- --
  13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
  14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
  17 -- for  more details.  You should have  received  a copy of the GNU General --
  18 -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
  19 -- http://www.gnu.org/licenses for a complete copy of the license.          --
  20 --                                                                          --
  21 -- GNAT was originally developed  by the GNAT team at  New York University. --
  22 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  23 --                                                                          --
  24 ------------------------------------------------------------------------------
  25 
  26 with Err_Vars; use Err_Vars;
  27 with Opt;      use Opt;
  28 with Output;   use Output;
  29 
  30 package body Warnsw is
  31 
  32    --  Local Subprograms
  33 
  34    procedure All_Warnings (Setting : Boolean);
  35    --  Sets all warnings off if Setting = False, and on if Setting = True
  36 
  37    procedure WA_Warnings;
  38    --  Turn on all warnings set by -gnatwa (also used by -gnatw.g)
  39 
  40    ------------------
  41    -- All_Warnings --
  42    ------------------
  43 
  44    procedure All_Warnings (Setting : Boolean) is
  45    begin
  46       Address_Clause_Overlay_Warnings     := Setting;
  47       Check_Unreferenced                  := Setting;
  48       Check_Unreferenced_Formals          := Setting;
  49       Check_Withs                         := Setting;
  50       Constant_Condition_Warnings         := Setting;
  51       Elab_Warnings                       := Setting;
  52       Implementation_Unit_Warnings        := Setting;
  53       Ineffective_Inline_Warnings         := Setting;
  54       List_Body_Required_Info             := Setting;
  55       List_Inherited_Aspects              := Setting;
  56       Warn_On_Ada_2005_Compatibility      := Setting;
  57       Warn_On_Ada_2012_Compatibility      := Setting;
  58       Warn_On_All_Unread_Out_Parameters   := Setting;
  59       Warn_On_Assertion_Failure           := Setting;
  60       Warn_On_Assumed_Low_Bound           := Setting;
  61       Warn_On_Atomic_Synchronization      := Setting;
  62       Warn_On_Bad_Fixed_Value             := Setting;
  63       Warn_On_Biased_Representation       := Setting;
  64       Warn_On_Constant                    := Setting;
  65       Warn_On_Deleted_Code                := Setting;
  66       Warn_On_Dereference                 := Setting;
  67       Warn_On_Export_Import               := Setting;
  68       Warn_On_Hiding                      := Setting;
  69       Warn_On_Modified_Unread             := Setting;
  70       Warn_On_No_Value_Assigned           := Setting;
  71       Warn_On_Non_Local_Exception         := Setting;
  72       Warn_On_Object_Renames_Function     := Setting;
  73       Warn_On_Obsolescent_Feature         := Setting;
  74       Warn_On_Overlap                     := Setting;
  75       Warn_On_Overridden_Size             := Setting;
  76       Warn_On_Parameter_Order             := Setting;
  77       Warn_On_Questionable_Missing_Parens := Setting;
  78       Warn_On_Record_Holes                := Setting;
  79       Warn_On_Redundant_Constructs        := Setting;
  80       Warn_On_Reverse_Bit_Order           := Setting;
  81       Warn_On_Size_Alignment              := Setting;
  82       Warn_On_Standard_Redefinition       := Setting;
  83       Warn_On_Suspicious_Contract         := Setting;
  84       Warn_On_Suspicious_Modulus_Value    := Setting;
  85       Warn_On_Unchecked_Conversion        := Setting;
  86       Warn_On_Unordered_Enumeration_Type  := Setting;
  87       Warn_On_Unrecognized_Pragma         := Setting;
  88       Warn_On_Unrepped_Components         := Setting;
  89       Warn_On_Warnings_Off                := Setting;
  90    end All_Warnings;
  91 
  92    ----------------------
  93    -- Restore_Warnings --
  94    ----------------------
  95 
  96    procedure Restore_Warnings (W : Warning_Record) is
  97    begin
  98       Address_Clause_Overlay_Warnings     :=
  99         W.Address_Clause_Overlay_Warnings;
 100       Check_Unreferenced                  :=
 101         W.Check_Unreferenced;
 102       Check_Unreferenced_Formals          :=
 103         W.Check_Unreferenced_Formals;
 104       Check_Withs                         :=
 105         W.Check_Withs;
 106       Constant_Condition_Warnings         :=
 107         W.Constant_Condition_Warnings;
 108       Elab_Warnings                       :=
 109         W.Elab_Warnings;
 110       Elab_Info_Messages                  :=
 111         W.Elab_Info_Messages;
 112       Implementation_Unit_Warnings        :=
 113         W.Implementation_Unit_Warnings;
 114       Ineffective_Inline_Warnings         :=
 115         W.Ineffective_Inline_Warnings;
 116       List_Body_Required_Info             :=
 117         W.List_Body_Required_Info;
 118       List_Inherited_Aspects              :=
 119         W.List_Inherited_Aspects;
 120       No_Warn_On_Non_Local_Exception      :=
 121         W.No_Warn_On_Non_Local_Exception;
 122       Warning_Doc_Switch                  :=
 123         W.Warning_Doc_Switch;
 124       Warn_On_Ada_2005_Compatibility      :=
 125         W.Warn_On_Ada_2005_Compatibility;
 126       Warn_On_Ada_2012_Compatibility      :=
 127         W.Warn_On_Ada_2012_Compatibility;
 128       Warn_On_All_Unread_Out_Parameters   :=
 129         W.Warn_On_All_Unread_Out_Parameters;
 130       Warn_On_Assertion_Failure           :=
 131         W.Warn_On_Assertion_Failure;
 132       Warn_On_Assumed_Low_Bound           :=
 133         W.Warn_On_Assumed_Low_Bound;
 134       Warn_On_Atomic_Synchronization      :=
 135         W.Warn_On_Atomic_Synchronization;
 136       Warn_On_Bad_Fixed_Value             :=
 137         W.Warn_On_Bad_Fixed_Value;
 138       Warn_On_Biased_Representation       :=
 139         W.Warn_On_Biased_Representation;
 140       Warn_On_Constant                    :=
 141         W.Warn_On_Constant;
 142       Warn_On_Deleted_Code                :=
 143         W.Warn_On_Deleted_Code;
 144       Warn_On_Dereference                 :=
 145         W.Warn_On_Dereference;
 146       Warn_On_Export_Import               :=
 147         W.Warn_On_Export_Import;
 148       Warn_On_Hiding                      :=
 149         W.Warn_On_Hiding;
 150       Warn_On_Modified_Unread             :=
 151         W.Warn_On_Modified_Unread;
 152       Warn_On_No_Value_Assigned           :=
 153         W.Warn_On_No_Value_Assigned;
 154       Warn_On_Non_Local_Exception         :=
 155         W.Warn_On_Non_Local_Exception;
 156       Warn_On_Object_Renames_Function     :=
 157         W.Warn_On_Object_Renames_Function;
 158       Warn_On_Obsolescent_Feature         :=
 159         W.Warn_On_Obsolescent_Feature;
 160       Warn_On_Overlap                     :=
 161         W.Warn_On_Overlap;
 162       Warn_On_Overridden_Size             :=
 163         W.Warn_On_Overridden_Size;
 164       Warn_On_Parameter_Order             :=
 165         W.Warn_On_Parameter_Order;
 166       Warn_On_Questionable_Missing_Parens :=
 167         W.Warn_On_Questionable_Missing_Parens;
 168       Warn_On_Record_Holes                :=
 169         W.Warn_On_Record_Holes;
 170       Warn_On_Redundant_Constructs        :=
 171         W.Warn_On_Redundant_Constructs;
 172       Warn_On_Reverse_Bit_Order           :=
 173         W.Warn_On_Reverse_Bit_Order;
 174       Warn_On_Size_Alignment              :=
 175         W.Warn_On_Size_Alignment;
 176       Warn_On_Standard_Redefinition       :=
 177         W.Warn_On_Standard_Redefinition;
 178       Warn_On_Suspicious_Contract         :=
 179         W.Warn_On_Suspicious_Contract;
 180       Warn_On_Unchecked_Conversion        :=
 181         W.Warn_On_Unchecked_Conversion;
 182       Warn_On_Unordered_Enumeration_Type  :=
 183         W.Warn_On_Unordered_Enumeration_Type;
 184       Warn_On_Unrecognized_Pragma         :=
 185         W.Warn_On_Unrecognized_Pragma;
 186       Warn_On_Unrepped_Components         :=
 187         W.Warn_On_Unrepped_Components;
 188       Warn_On_Warnings_Off                :=
 189         W.Warn_On_Warnings_Off;
 190    end Restore_Warnings;
 191 
 192    -------------------
 193    -- Save_Warnings --
 194    -------------------
 195 
 196    function Save_Warnings return Warning_Record is
 197       W : Warning_Record;
 198 
 199    begin
 200       W.Address_Clause_Overlay_Warnings     :=
 201         Address_Clause_Overlay_Warnings;
 202       W.Check_Unreferenced                  :=
 203         Check_Unreferenced;
 204       W.Check_Unreferenced_Formals          :=
 205         Check_Unreferenced_Formals;
 206       W.Check_Withs                         :=
 207         Check_Withs;
 208       W.Constant_Condition_Warnings         :=
 209         Constant_Condition_Warnings;
 210       W.Elab_Info_Messages                  :=
 211         Elab_Info_Messages;
 212       W.Elab_Warnings                       :=
 213         Elab_Warnings;
 214       W.Implementation_Unit_Warnings        :=
 215         Implementation_Unit_Warnings;
 216       W.Ineffective_Inline_Warnings         :=
 217         Ineffective_Inline_Warnings;
 218       W.List_Body_Required_Info             :=
 219         List_Body_Required_Info;
 220       W.List_Inherited_Aspects              :=
 221         List_Inherited_Aspects;
 222       W.No_Warn_On_Non_Local_Exception      :=
 223         No_Warn_On_Non_Local_Exception;
 224       W.Warning_Doc_Switch                  :=
 225         Warning_Doc_Switch;
 226       W.Warn_On_Ada_2005_Compatibility      :=
 227         Warn_On_Ada_2005_Compatibility;
 228       W.Warn_On_Ada_2012_Compatibility      :=
 229         Warn_On_Ada_2012_Compatibility;
 230       W.Warn_On_All_Unread_Out_Parameters   :=
 231         Warn_On_All_Unread_Out_Parameters;
 232       W.Warn_On_Assertion_Failure           :=
 233         Warn_On_Assertion_Failure;
 234       W.Warn_On_Assumed_Low_Bound           :=
 235         Warn_On_Assumed_Low_Bound;
 236       W.Warn_On_Atomic_Synchronization      :=
 237         Warn_On_Atomic_Synchronization;
 238       W.Warn_On_Bad_Fixed_Value             :=
 239         Warn_On_Bad_Fixed_Value;
 240       W.Warn_On_Biased_Representation       :=
 241         Warn_On_Biased_Representation;
 242       W.Warn_On_Constant                    :=
 243         Warn_On_Constant;
 244       W.Warn_On_Deleted_Code                :=
 245         Warn_On_Deleted_Code;
 246       W.Warn_On_Dereference                 :=
 247         Warn_On_Dereference;
 248       W.Warn_On_Export_Import               :=
 249         Warn_On_Export_Import;
 250       W.Warn_On_Hiding                      :=
 251         Warn_On_Hiding;
 252       W.Warn_On_Modified_Unread             :=
 253         Warn_On_Modified_Unread;
 254       W.Warn_On_No_Value_Assigned           :=
 255         Warn_On_No_Value_Assigned;
 256       W.Warn_On_Non_Local_Exception         :=
 257         Warn_On_Non_Local_Exception;
 258       W.Warn_On_Object_Renames_Function     :=
 259         Warn_On_Object_Renames_Function;
 260       W.Warn_On_Obsolescent_Feature         :=
 261         Warn_On_Obsolescent_Feature;
 262       W.Warn_On_Overlap                     :=
 263         Warn_On_Overlap;
 264       W.Warn_On_Overridden_Size             :=
 265         Warn_On_Overridden_Size;
 266       W.Warn_On_Parameter_Order             :=
 267         Warn_On_Parameter_Order;
 268       W.Warn_On_Questionable_Missing_Parens :=
 269         Warn_On_Questionable_Missing_Parens;
 270       W.Warn_On_Record_Holes                :=
 271         Warn_On_Record_Holes;
 272       W.Warn_On_Redundant_Constructs        :=
 273         Warn_On_Redundant_Constructs;
 274       W.Warn_On_Reverse_Bit_Order           :=
 275         Warn_On_Reverse_Bit_Order;
 276       W.Warn_On_Size_Alignment              :=
 277         Warn_On_Size_Alignment;
 278       W.Warn_On_Standard_Redefinition       :=
 279         Warn_On_Standard_Redefinition;
 280       W.Warn_On_Suspicious_Contract         :=
 281         Warn_On_Suspicious_Contract;
 282       W.Warn_On_Unchecked_Conversion        :=
 283         Warn_On_Unchecked_Conversion;
 284       W.Warn_On_Unordered_Enumeration_Type  :=
 285         Warn_On_Unordered_Enumeration_Type;
 286       W.Warn_On_Unrecognized_Pragma         :=
 287         Warn_On_Unrecognized_Pragma;
 288       W.Warn_On_Unrepped_Components         :=
 289         Warn_On_Unrepped_Components;
 290       W.Warn_On_Warnings_Off                :=
 291         Warn_On_Warnings_Off;
 292       return W;
 293    end Save_Warnings;
 294 
 295    ----------------------------
 296    -- Set_Dot_Warning_Switch --
 297    ----------------------------
 298 
 299    function Set_Dot_Warning_Switch (C : Character) return Boolean is
 300    begin
 301       case C is
 302          when 'a' =>
 303             Warn_On_Assertion_Failure           := True;
 304 
 305          when 'A' =>
 306             Warn_On_Assertion_Failure           := False;
 307 
 308          when 'b' =>
 309             Warn_On_Biased_Representation       := True;
 310 
 311          when 'B' =>
 312             Warn_On_Biased_Representation       := False;
 313 
 314          when 'c' =>
 315             Warn_On_Unrepped_Components         := True;
 316 
 317          when 'C' =>
 318             Warn_On_Unrepped_Components         := False;
 319 
 320          when 'd' =>
 321             Warning_Doc_Switch                  := True;
 322 
 323          when 'D' =>
 324             Warning_Doc_Switch                  := False;
 325 
 326          when 'e' =>
 327             All_Warnings (True);
 328 
 329          when 'f' =>
 330             Warn_On_Elab_Access                 := True;
 331 
 332          when 'F' =>
 333             Warn_On_Elab_Access                 := False;
 334 
 335          when 'g' =>
 336             Set_GNAT_Mode_Warnings;
 337 
 338          when 'h' =>
 339             Warn_On_Record_Holes                := True;
 340 
 341          when 'H' =>
 342             Warn_On_Record_Holes                := False;
 343 
 344          when 'i' =>
 345             Warn_On_Overlap                     := True;
 346 
 347          when 'I' =>
 348             Warn_On_Overlap                     := False;
 349 
 350          when 'k' =>
 351             Warn_On_Standard_Redefinition       := True;
 352 
 353          when 'K' =>
 354             Warn_On_Standard_Redefinition       := False;
 355 
 356          when 'l' =>
 357             List_Inherited_Aspects              := True;
 358 
 359          when 'L' =>
 360             List_Inherited_Aspects              := False;
 361 
 362          when 'm' =>
 363             Warn_On_Suspicious_Modulus_Value    := True;
 364 
 365          when 'M' =>
 366             Warn_On_Suspicious_Modulus_Value    := False;
 367 
 368          when 'n' =>
 369             Warn_On_Atomic_Synchronization      := True;
 370 
 371          when 'N' =>
 372             Warn_On_Atomic_Synchronization      := False;
 373 
 374          when 'o' =>
 375             Warn_On_All_Unread_Out_Parameters   := True;
 376 
 377          when 'O' =>
 378             Warn_On_All_Unread_Out_Parameters   := False;
 379 
 380          when 'p' =>
 381             Warn_On_Parameter_Order             := True;
 382 
 383          when 'P' =>
 384             Warn_On_Parameter_Order             := False;
 385 
 386          when 'r' =>
 387             Warn_On_Object_Renames_Function     := True;
 388 
 389          when 'R' =>
 390             Warn_On_Object_Renames_Function     := False;
 391 
 392          when 's' =>
 393             Warn_On_Overridden_Size             := True;
 394 
 395          when 'S' =>
 396             Warn_On_Overridden_Size             := False;
 397 
 398          when 't' =>
 399             Warn_On_Suspicious_Contract         := True;
 400 
 401          when 'T' =>
 402             Warn_On_Suspicious_Contract         := False;
 403 
 404          when 'u' =>
 405             Warn_On_Unordered_Enumeration_Type  := True;
 406 
 407          when 'U' =>
 408             Warn_On_Unordered_Enumeration_Type  := False;
 409 
 410          when 'v' =>
 411             Warn_On_Reverse_Bit_Order           := True;
 412 
 413          when 'V' =>
 414             Warn_On_Reverse_Bit_Order           := False;
 415 
 416          when 'w' =>
 417             Warn_On_Warnings_Off                := True;
 418 
 419          when 'W' =>
 420             Warn_On_Warnings_Off                := False;
 421 
 422          when 'x' =>
 423             Warn_On_Non_Local_Exception         := True;
 424 
 425          when 'X' =>
 426             Warn_On_Non_Local_Exception         := False;
 427             No_Warn_On_Non_Local_Exception      := True;
 428 
 429          when 'y' =>
 430             List_Body_Required_Info             := True;
 431 
 432          when 'Y' =>
 433             List_Body_Required_Info             := False;
 434 
 435          when 'z' =>
 436             Warn_On_Size_Alignment              := True;
 437 
 438          when 'Z' =>
 439             Warn_On_Size_Alignment              := False;
 440 
 441          when others =>
 442             if Ignore_Unrecognized_VWY_Switches then
 443                Write_Line ("unrecognized switch -gnatw." & C & " ignored");
 444             else
 445                return False;
 446             end if;
 447       end case;
 448 
 449       return True;
 450    end Set_Dot_Warning_Switch;
 451 
 452    ----------------------------
 453    -- Set_GNAT_Mode_Warnings --
 454    ----------------------------
 455 
 456    procedure Set_GNAT_Mode_Warnings is
 457    begin
 458       --  Set -gnatwa warnings and no others
 459 
 460       All_Warnings (False);
 461       WA_Warnings;
 462 
 463       --  These warnings are added to the -gnatwa set
 464 
 465       Address_Clause_Overlay_Warnings     := True;
 466       Warn_On_Overridden_Size             := True;
 467 
 468       --  These warnings are removed from the -gnatwa set
 469 
 470       Implementation_Unit_Warnings        := False;
 471       Warn_On_Non_Local_Exception         := False;
 472       No_Warn_On_Non_Local_Exception      := True;
 473       Warn_On_Reverse_Bit_Order           := False;
 474       Warn_On_Size_Alignment              := False;
 475       Warn_On_Unrepped_Components         := False;
 476    end Set_GNAT_Mode_Warnings;
 477 
 478    ------------------------
 479    -- Set_Warning_Switch --
 480    ------------------------
 481 
 482    function Set_Warning_Switch (C : Character) return Boolean is
 483    begin
 484       case C is
 485          when 'a' =>
 486             WA_Warnings;
 487 
 488          when 'A' =>
 489             All_Warnings (False);
 490             No_Warn_On_Non_Local_Exception      := True;
 491 
 492          when 'b' =>
 493             Warn_On_Bad_Fixed_Value             := True;
 494 
 495          when 'B' =>
 496             Warn_On_Bad_Fixed_Value             := False;
 497 
 498          when 'c' =>
 499             Constant_Condition_Warnings         := True;
 500 
 501          when 'C' =>
 502             Constant_Condition_Warnings         := False;
 503 
 504          when 'd' =>
 505             Warn_On_Dereference                 := True;
 506 
 507          when 'D' =>
 508             Warn_On_Dereference                 := False;
 509 
 510          when 'e' =>
 511             Warning_Mode                        := Treat_As_Error;
 512 
 513          when 'f' =>
 514             Check_Unreferenced_Formals          := True;
 515 
 516          when 'F' =>
 517             Check_Unreferenced_Formals          := False;
 518 
 519          when 'g' =>
 520             Warn_On_Unrecognized_Pragma         := True;
 521 
 522          when 'G' =>
 523             Warn_On_Unrecognized_Pragma         := False;
 524 
 525          when 'h' =>
 526             Warn_On_Hiding                      := True;
 527 
 528          when 'H' =>
 529             Warn_On_Hiding                      := False;
 530 
 531          when 'i' =>
 532             Implementation_Unit_Warnings        := True;
 533 
 534          when 'I' =>
 535             Implementation_Unit_Warnings        := False;
 536 
 537          when 'j' =>
 538             Warn_On_Obsolescent_Feature         := True;
 539 
 540          when 'J' =>
 541             Warn_On_Obsolescent_Feature         := False;
 542 
 543          when 'k' =>
 544             Warn_On_Constant                    := True;
 545 
 546          when 'K' =>
 547             Warn_On_Constant                    := False;
 548 
 549          when 'l' =>
 550             Elab_Warnings                       := True;
 551 
 552          when 'L' =>
 553             Elab_Warnings                       := False;
 554 
 555          when 'm' =>
 556             Warn_On_Modified_Unread             := True;
 557 
 558          when 'M' =>
 559             Warn_On_Modified_Unread             := False;
 560 
 561          when 'n' =>
 562             Warning_Mode                        := Normal;
 563 
 564          when 'o' =>
 565             Address_Clause_Overlay_Warnings     := True;
 566 
 567          when 'O' =>
 568             Address_Clause_Overlay_Warnings     := False;
 569 
 570          when 'p' =>
 571             Ineffective_Inline_Warnings         := True;
 572 
 573          when 'P' =>
 574             Ineffective_Inline_Warnings         := False;
 575 
 576          when 'q' =>
 577             Warn_On_Questionable_Missing_Parens := True;
 578 
 579          when 'Q' =>
 580             Warn_On_Questionable_Missing_Parens := False;
 581 
 582          when 'r' =>
 583             Warn_On_Redundant_Constructs        := True;
 584 
 585          when 'R' =>
 586             Warn_On_Redundant_Constructs        := False;
 587 
 588          when 's' =>
 589             Warning_Mode                        := Suppress;
 590 
 591          when 't' =>
 592             Warn_On_Deleted_Code                := True;
 593 
 594          when 'T' =>
 595             Warn_On_Deleted_Code                := False;
 596 
 597          when 'u' =>
 598             Check_Unreferenced                  := True;
 599             Check_Withs                         := True;
 600             Check_Unreferenced_Formals          := True;
 601 
 602          when 'U' =>
 603             Check_Unreferenced                  := False;
 604             Check_Withs                         := False;
 605             Check_Unreferenced_Formals          := False;
 606 
 607          when 'v' =>
 608             Warn_On_No_Value_Assigned           := True;
 609 
 610          when 'V' =>
 611             Warn_On_No_Value_Assigned           := False;
 612 
 613          when 'w' =>
 614             Warn_On_Assumed_Low_Bound           := True;
 615 
 616          when 'W' =>
 617             Warn_On_Assumed_Low_Bound           := False;
 618 
 619          when 'x' =>
 620             Warn_On_Export_Import               := True;
 621 
 622          when 'X' =>
 623             Warn_On_Export_Import               := False;
 624 
 625          when 'y' =>
 626             Warn_On_Ada_2005_Compatibility      := True;
 627             Warn_On_Ada_2012_Compatibility      := True;
 628 
 629          when 'Y' =>
 630             Warn_On_Ada_2005_Compatibility      := False;
 631             Warn_On_Ada_2012_Compatibility      := False;
 632 
 633          when 'z' =>
 634             Warn_On_Unchecked_Conversion        := True;
 635 
 636          when 'Z' =>
 637             Warn_On_Unchecked_Conversion        := False;
 638 
 639          when others =>
 640             if Ignore_Unrecognized_VWY_Switches then
 641                Write_Line ("unrecognized switch -gnatw" & C & " ignored");
 642             else
 643                return False;
 644             end if;
 645       end case;
 646 
 647       return True;
 648    end Set_Warning_Switch;
 649 
 650    -----------------
 651    -- WA_Warnings --
 652    -----------------
 653 
 654    procedure WA_Warnings is
 655    begin
 656       Check_Unreferenced                  := True; -- -gnatwf/-gnatwu
 657       Check_Unreferenced_Formals          := True; -- -gnatwf/-gnatwu
 658       Check_Withs                         := True; -- -gnatwu
 659       Constant_Condition_Warnings         := True; -- -gnatwc
 660       Implementation_Unit_Warnings        := True; -- -gnatwi
 661       Ineffective_Inline_Warnings         := True; -- -gnatwp
 662       Warn_On_Ada_2005_Compatibility      := True; -- -gnatwy
 663       Warn_On_Ada_2012_Compatibility      := True; -- -gnatwy
 664       Warn_On_Assertion_Failure           := True; -- -gnatw.a
 665       Warn_On_Assumed_Low_Bound           := True; -- -gnatww
 666       Warn_On_Bad_Fixed_Value             := True; -- -gnatwb
 667       Warn_On_Biased_Representation       := True; -- -gnatw.b
 668       Warn_On_Constant                    := True; -- -gnatwk
 669       Warn_On_Export_Import               := True; -- -gnatwx
 670       Warn_On_Modified_Unread             := True; -- -gnatwm
 671       Warn_On_No_Value_Assigned           := True; -- -gnatwv
 672       Warn_On_Non_Local_Exception         := True; -- -gnatw.x
 673       Warn_On_Object_Renames_Function     := True; -- -gnatw.r
 674       Warn_On_Obsolescent_Feature         := True; -- -gnatwj
 675       Warn_On_Overlap                     := True; -- -gnatw.i
 676       Warn_On_Parameter_Order             := True; -- -gnatw.p
 677       Warn_On_Questionable_Missing_Parens := True; -- -gnatwq
 678       Warn_On_Redundant_Constructs        := True; -- -gnatwr
 679       Warn_On_Reverse_Bit_Order           := True; -- -gnatw.v
 680       Warn_On_Size_Alignment              := True; -- -gnatw.z
 681       Warn_On_Suspicious_Contract         := True; -- -gnatw.t
 682       Warn_On_Suspicious_Modulus_Value    := True; -- -gnatw.m
 683       Warn_On_Unchecked_Conversion        := True; -- -gnatwz
 684       Warn_On_Unrecognized_Pragma         := True; -- -gnatwg
 685       Warn_On_Unrepped_Components         := True; -- -gnatw.c
 686    end WA_Warnings;
 687 
 688 end Warnsw;