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-2013, 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 26with Err_Vars; use Err_Vars; 27with Opt; use Opt; 28with Targparm; use Targparm; 29package body Warnsw is 30 31 ---------------------------- 32 -- Set_Dot_Warning_Switch -- 33 ---------------------------- 34 35 function Set_Dot_Warning_Switch (C : Character) return Boolean is 36 begin 37 case C is 38 when 'a' => 39 Warn_On_Assertion_Failure := True; 40 41 when 'A' => 42 Warn_On_Assertion_Failure := False; 43 44 when 'b' => 45 Warn_On_Biased_Representation := True; 46 47 when 'B' => 48 Warn_On_Biased_Representation := False; 49 50 when 'c' => 51 Warn_On_Unrepped_Components := True; 52 53 when 'C' => 54 Warn_On_Unrepped_Components := False; 55 56 when 'd' => 57 if OpenVMS_On_Target then 58 return False; 59 end if; 60 61 Warning_Doc_Switch := True; 62 63 when 'D' => 64 if OpenVMS_On_Target then 65 return False; 66 end if; 67 68 Warning_Doc_Switch := False; 69 70 when 'e' => 71 Address_Clause_Overlay_Warnings := True; 72 Check_Unreferenced := True; 73 Check_Unreferenced_Formals := True; 74 Check_Withs := True; 75 Constant_Condition_Warnings := True; 76 Elab_Warnings := True; 77 Implementation_Unit_Warnings := True; 78 Ineffective_Inline_Warnings := True; 79 List_Inherited_Aspects := True; 80 81 if not OpenVMS_On_Target then 82 Warning_Doc_Switch := True; 83 end if; 84 85 Warn_On_Ada_2005_Compatibility := True; 86 Warn_On_Ada_2012_Compatibility := True; 87 Warn_On_All_Unread_Out_Parameters := True; 88 Warn_On_Assertion_Failure := True; 89 Warn_On_Assumed_Low_Bound := True; 90 Warn_On_Atomic_Synchronization := True; 91 Warn_On_Bad_Fixed_Value := True; 92 Warn_On_Biased_Representation := True; 93 Warn_On_Constant := True; 94 Warn_On_Deleted_Code := True; 95 Warn_On_Dereference := True; 96 Warn_On_Export_Import := True; 97 Warn_On_Hiding := True; 98 Warn_On_Modified_Unread := True; 99 Warn_On_No_Value_Assigned := True; 100 Warn_On_Non_Local_Exception := True; 101 Warn_On_Object_Renames_Function := True; 102 Warn_On_Obsolescent_Feature := True; 103 Warn_On_Overlap := True; 104 Warn_On_Overridden_Size := True; 105 Warn_On_Parameter_Order := True; 106 Warn_On_Questionable_Missing_Parens := True; 107 Warn_On_Record_Holes := True; 108 Warn_On_Redundant_Constructs := True; 109 Warn_On_Reverse_Bit_Order := True; 110 Warn_On_Standard_Redefinition := True; 111 Warn_On_Suspicious_Contract := True; 112 Warn_On_Unchecked_Conversion := True; 113 Warn_On_Unordered_Enumeration_Type := True; 114 Warn_On_Unrecognized_Pragma := True; 115 Warn_On_Unrepped_Components := True; 116 Warn_On_Warnings_Off := True; 117 118 when 'g' => 119 Set_GNAT_Mode_Warnings; 120 121 when 'h' => 122 Warn_On_Record_Holes := True; 123 124 when 'H' => 125 Warn_On_Record_Holes := False; 126 127 when 'i' => 128 Warn_On_Overlap := True; 129 130 when 'I' => 131 Warn_On_Overlap := False; 132 133 when 'k' => 134 Warn_On_Standard_Redefinition := True; 135 136 when 'K' => 137 Warn_On_Standard_Redefinition := False; 138 139 when 'l' => 140 List_Inherited_Aspects := True; 141 142 when 'L' => 143 List_Inherited_Aspects := False; 144 145 when 'm' => 146 Warn_On_Suspicious_Modulus_Value := True; 147 148 when 'M' => 149 Warn_On_Suspicious_Modulus_Value := False; 150 151 when 'n' => 152 Warn_On_Atomic_Synchronization := True; 153 154 when 'N' => 155 Warn_On_Atomic_Synchronization := False; 156 157 when 'o' => 158 Warn_On_All_Unread_Out_Parameters := True; 159 160 when 'O' => 161 Warn_On_All_Unread_Out_Parameters := False; 162 163 when 'p' => 164 Warn_On_Parameter_Order := True; 165 166 when 'P' => 167 Warn_On_Parameter_Order := False; 168 169 when 'r' => 170 Warn_On_Object_Renames_Function := True; 171 172 when 'R' => 173 Warn_On_Object_Renames_Function := False; 174 175 when 's' => 176 Warn_On_Overridden_Size := True; 177 178 when 'S' => 179 Warn_On_Overridden_Size := False; 180 181 when 't' => 182 Warn_On_Suspicious_Contract := True; 183 184 when 'T' => 185 Warn_On_Suspicious_Contract := False; 186 187 when 'u' => 188 Warn_On_Unordered_Enumeration_Type := True; 189 190 when 'U' => 191 Warn_On_Unordered_Enumeration_Type := False; 192 193 when 'v' => 194 Warn_On_Reverse_Bit_Order := True; 195 196 when 'V' => 197 Warn_On_Reverse_Bit_Order := False; 198 199 when 'w' => 200 Warn_On_Warnings_Off := True; 201 202 when 'W' => 203 Warn_On_Warnings_Off := False; 204 205 when 'x' => 206 Warn_On_Non_Local_Exception := True; 207 208 when 'X' => 209 Warn_On_Non_Local_Exception := False; 210 No_Warn_On_Non_Local_Exception := True; 211 212 when others => 213 return False; 214 end case; 215 216 return True; 217 end Set_Dot_Warning_Switch; 218 219 ---------------------------- 220 -- Set_GNAT_Mode_Warnings -- 221 ---------------------------- 222 223 procedure Set_GNAT_Mode_Warnings is 224 begin 225 Address_Clause_Overlay_Warnings := True; 226 Check_Unreferenced := True; 227 Check_Unreferenced_Formals := True; 228 Check_Withs := True; 229 Constant_Condition_Warnings := True; 230 Elab_Warnings := False; 231 Implementation_Unit_Warnings := False; 232 Ineffective_Inline_Warnings := True; 233 List_Inherited_Aspects := False; 234 Warning_Doc_Switch := False; 235 Warn_On_Ada_2005_Compatibility := True; 236 Warn_On_Ada_2012_Compatibility := True; 237 Warn_On_All_Unread_Out_Parameters := False; 238 Warn_On_Assertion_Failure := True; 239 Warn_On_Assumed_Low_Bound := True; 240 Warn_On_Atomic_Synchronization := False; 241 Warn_On_Bad_Fixed_Value := True; 242 Warn_On_Biased_Representation := True; 243 Warn_On_Constant := True; 244 Warn_On_Deleted_Code := False; 245 Warn_On_Dereference := False; 246 Warn_On_Export_Import := True; 247 Warn_On_Hiding := False; 248 Warn_On_Modified_Unread := True; 249 Warn_On_No_Value_Assigned := True; 250 Warn_On_Non_Local_Exception := False; 251 Warn_On_Object_Renames_Function := True; 252 Warn_On_Obsolescent_Feature := True; 253 Warn_On_Overlap := True; 254 Warn_On_Overridden_Size := True; 255 Warn_On_Parameter_Order := True; 256 Warn_On_Questionable_Missing_Parens := True; 257 Warn_On_Record_Holes := False; 258 Warn_On_Redundant_Constructs := True; 259 Warn_On_Reverse_Bit_Order := False; 260 Warn_On_Suspicious_Contract := True; 261 Warn_On_Unchecked_Conversion := True; 262 Warn_On_Unordered_Enumeration_Type := False; 263 Warn_On_Unrecognized_Pragma := True; 264 Warn_On_Unrepped_Components := False; 265 Warn_On_Warnings_Off := False; 266 end Set_GNAT_Mode_Warnings; 267 268 ------------------------ 269 -- Set_Warning_Switch -- 270 ------------------------ 271 272 function Set_Warning_Switch (C : Character) return Boolean is 273 begin 274 case C is 275 when 'a' => 276 Check_Unreferenced := True; 277 Check_Unreferenced_Formals := True; 278 Check_Withs := True; 279 Constant_Condition_Warnings := True; 280 Implementation_Unit_Warnings := True; 281 Ineffective_Inline_Warnings := True; 282 Warn_On_Ada_2005_Compatibility := True; 283 Warn_On_Ada_2012_Compatibility := True; 284 Warn_On_Assertion_Failure := True; 285 Warn_On_Assumed_Low_Bound := True; 286 Warn_On_Bad_Fixed_Value := True; 287 Warn_On_Biased_Representation := True; 288 Warn_On_Constant := True; 289 Warn_On_Export_Import := True; 290 Warn_On_Modified_Unread := True; 291 Warn_On_No_Value_Assigned := True; 292 Warn_On_Non_Local_Exception := True; 293 Warn_On_Object_Renames_Function := True; 294 Warn_On_Obsolescent_Feature := True; 295 Warn_On_Overlap := True; 296 Warn_On_Parameter_Order := True; 297 Warn_On_Questionable_Missing_Parens := True; 298 Warn_On_Redundant_Constructs := True; 299 Warn_On_Reverse_Bit_Order := True; 300 Warn_On_Suspicious_Contract := True; 301 Warn_On_Unchecked_Conversion := True; 302 Warn_On_Unrecognized_Pragma := True; 303 Warn_On_Unrepped_Components := True; 304 305 when 'A' => 306 Address_Clause_Overlay_Warnings := False; 307 Check_Unreferenced := False; 308 Check_Unreferenced_Formals := False; 309 Check_Withs := False; 310 Constant_Condition_Warnings := False; 311 Elab_Warnings := False; 312 Implementation_Unit_Warnings := False; 313 Ineffective_Inline_Warnings := False; 314 List_Inherited_Aspects := False; 315 Warning_Doc_Switch := False; 316 Warn_On_Ada_2005_Compatibility := False; 317 Warn_On_Ada_2012_Compatibility := False; 318 Warn_On_All_Unread_Out_Parameters := False; 319 Warn_On_Assertion_Failure := False; 320 Warn_On_Assumed_Low_Bound := False; 321 Warn_On_Bad_Fixed_Value := False; 322 Warn_On_Biased_Representation := False; 323 Warn_On_Constant := False; 324 Warn_On_Deleted_Code := False; 325 Warn_On_Dereference := False; 326 Warn_On_Export_Import := False; 327 Warn_On_Hiding := False; 328 Warn_On_Modified_Unread := False; 329 Warn_On_No_Value_Assigned := False; 330 Warn_On_Non_Local_Exception := False; 331 Warn_On_Object_Renames_Function := False; 332 Warn_On_Obsolescent_Feature := False; 333 Warn_On_Overlap := False; 334 Warn_On_Overridden_Size := False; 335 Warn_On_Parameter_Order := False; 336 Warn_On_Record_Holes := False; 337 Warn_On_Questionable_Missing_Parens := False; 338 Warn_On_Redundant_Constructs := False; 339 Warn_On_Reverse_Bit_Order := False; 340 Warn_On_Standard_Redefinition := False; 341 Warn_On_Suspicious_Contract := False; 342 Warn_On_Suspicious_Modulus_Value := False; 343 Warn_On_Unchecked_Conversion := False; 344 Warn_On_Unordered_Enumeration_Type := False; 345 Warn_On_Unrecognized_Pragma := False; 346 Warn_On_Unrepped_Components := False; 347 Warn_On_Warnings_Off := False; 348 349 No_Warn_On_Non_Local_Exception := True; 350 351 when 'b' => 352 Warn_On_Bad_Fixed_Value := True; 353 354 when 'B' => 355 Warn_On_Bad_Fixed_Value := False; 356 357 when 'c' => 358 Constant_Condition_Warnings := True; 359 360 when 'C' => 361 Constant_Condition_Warnings := False; 362 363 when 'd' => 364 Warn_On_Dereference := True; 365 366 when 'D' => 367 Warn_On_Dereference := False; 368 369 when 'e' => 370 Warning_Mode := Treat_As_Error; 371 372 when 'f' => 373 Check_Unreferenced_Formals := True; 374 375 when 'F' => 376 Check_Unreferenced_Formals := False; 377 378 when 'g' => 379 Warn_On_Unrecognized_Pragma := True; 380 381 when 'G' => 382 Warn_On_Unrecognized_Pragma := False; 383 384 when 'h' => 385 Warn_On_Hiding := True; 386 387 when 'H' => 388 Warn_On_Hiding := False; 389 390 when 'i' => 391 Implementation_Unit_Warnings := True; 392 393 when 'I' => 394 Implementation_Unit_Warnings := False; 395 396 when 'j' => 397 Warn_On_Obsolescent_Feature := True; 398 399 when 'J' => 400 Warn_On_Obsolescent_Feature := False; 401 402 when 'k' => 403 Warn_On_Constant := True; 404 405 when 'K' => 406 Warn_On_Constant := False; 407 408 when 'l' => 409 Elab_Warnings := True; 410 411 when 'L' => 412 Elab_Warnings := False; 413 414 when 'm' => 415 Warn_On_Modified_Unread := True; 416 417 when 'M' => 418 Warn_On_Modified_Unread := False; 419 420 when 'n' => 421 Warning_Mode := Normal; 422 423 when 'o' => 424 Address_Clause_Overlay_Warnings := True; 425 426 when 'O' => 427 Address_Clause_Overlay_Warnings := False; 428 429 when 'p' => 430 Ineffective_Inline_Warnings := True; 431 432 when 'P' => 433 Ineffective_Inline_Warnings := False; 434 435 when 'q' => 436 Warn_On_Questionable_Missing_Parens := True; 437 438 when 'Q' => 439 Warn_On_Questionable_Missing_Parens := False; 440 441 when 'r' => 442 Warn_On_Redundant_Constructs := True; 443 444 when 'R' => 445 Warn_On_Redundant_Constructs := False; 446 447 when 's' => 448 Warning_Mode := Suppress; 449 450 when 't' => 451 Warn_On_Deleted_Code := True; 452 453 when 'T' => 454 Warn_On_Deleted_Code := False; 455 456 when 'u' => 457 Check_Unreferenced := True; 458 Check_Withs := True; 459 Check_Unreferenced_Formals := True; 460 461 when 'U' => 462 Check_Unreferenced := False; 463 Check_Withs := False; 464 Check_Unreferenced_Formals := False; 465 466 when 'v' => 467 Warn_On_No_Value_Assigned := True; 468 469 when 'V' => 470 Warn_On_No_Value_Assigned := False; 471 472 when 'w' => 473 Warn_On_Assumed_Low_Bound := True; 474 475 when 'W' => 476 Warn_On_Assumed_Low_Bound := False; 477 478 when 'x' => 479 Warn_On_Export_Import := True; 480 481 when 'X' => 482 Warn_On_Export_Import := False; 483 484 when 'y' => 485 Warn_On_Ada_2005_Compatibility := True; 486 Warn_On_Ada_2012_Compatibility := True; 487 488 when 'Y' => 489 Warn_On_Ada_2005_Compatibility := False; 490 Warn_On_Ada_2012_Compatibility := False; 491 492 when 'z' => 493 Warn_On_Unchecked_Conversion := True; 494 495 when 'Z' => 496 Warn_On_Unchecked_Conversion := False; 497 498 when others => 499 return False; 500 end case; 501 502 return True; 503 end Set_Warning_Switch; 504 505end Warnsw; 506