2011-10-24 Ed Schonberg <schonberg@adacore.com> * sem_ch12.adb (Earlier): make available globally. If both nodes have the same sloc, the freeze node that does not come from source is the later one. (True_Parent): Make available globally. (Previous_Instance): Subsidiary of Insert_Freeze_Node_For_Instance, to check whether the generic parent of the current instance is declared within a previous instance in the same unit or declarative part, in which case the freeze nodes of both instances must appear in order to prevent elaboration problems in gigi. * sem_ch12.adb (Insert_Freeze_Node_For_Instance): A stub is a freeze point, and the freeze node of a preceding instantiation must be inserted before it. 2011-10-24 Robert Dewar <dewar@adacore.com> * checks.ads, checks.adb: Add handling of Synchronization_Check * debug.adb: Add doc for -gnatd.d and -gnatd.e (disable/enable atomic sync). * exp_ch2.adb (Expand_Entity_Reference): Set Atomic_Sync_Required flag Minor code reorganization. * opt.ads (Warn_On_Atomic_Synchronization): New switch. * par-prag.adb: Add dummy entries for pragma Disable/Enable_Atomic_Synchronization. * sem_prag.adb (Process_Suppress_Unsuppress): Handle case of Atomic_Synchronization specially (not suppressed by All_Checks, cannot be set from Source). (Pragma Disable/Enable_Atomic_Synchronization): Add processing. * sinfo.ads, sinfo.adb: Add Atomic_Sync_Required flag * snames.ads-tmpl: Add entry for Atomic_Synchronization Add entry for pragma Disable/Enable_Atomic_Synchronization * switch-c.adb: The -gnatp switch does not disable Atomic_Synchronization Add -gnatep switch to disable Atomic_Synchronization. * types.ads: Add entry for Synchronization_Check * usage.adb: Add line for -gnated switch * warnsw.adb: Settings for Warn_On_Atomic_Synchronization From-SVN: r180373
475 lines
18 KiB
Ada
475 lines
18 KiB
Ada
------------------------------------------------------------------------------
|
|
-- --
|
|
-- GNAT COMPILER COMPONENTS --
|
|
-- --
|
|
-- W A R N S W --
|
|
-- --
|
|
-- B o d y --
|
|
-- --
|
|
-- Copyright (C) 1999-2011, 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 Opt; use Opt;
|
|
|
|
package body Warnsw is
|
|
|
|
----------------------------
|
|
-- Set_Dot_Warning_Switch --
|
|
----------------------------
|
|
|
|
function Set_Dot_Warning_Switch (C : Character) return Boolean is
|
|
begin
|
|
case C is
|
|
when 'a' =>
|
|
Warn_On_Assertion_Failure := True;
|
|
|
|
when 'A' =>
|
|
Warn_On_Assertion_Failure := False;
|
|
|
|
when 'b' =>
|
|
Warn_On_Biased_Representation := True;
|
|
|
|
when 'B' =>
|
|
Warn_On_Biased_Representation := False;
|
|
|
|
when 'c' =>
|
|
Warn_On_Unrepped_Components := True;
|
|
|
|
when 'C' =>
|
|
Warn_On_Unrepped_Components := False;
|
|
|
|
when 'e' =>
|
|
Address_Clause_Overlay_Warnings := True;
|
|
Check_Unreferenced := True;
|
|
Check_Unreferenced_Formals := True;
|
|
Check_Withs := True;
|
|
Constant_Condition_Warnings := True;
|
|
Elab_Warnings := True;
|
|
Implementation_Unit_Warnings := True;
|
|
Ineffective_Inline_Warnings := True;
|
|
List_Inherited_Aspects := True;
|
|
Warn_On_Ada_2005_Compatibility := True;
|
|
Warn_On_Ada_2012_Compatibility := True;
|
|
Warn_On_All_Unread_Out_Parameters := True;
|
|
Warn_On_Assertion_Failure := True;
|
|
Warn_On_Assumed_Low_Bound := True;
|
|
Warn_On_Atomic_Synchronization := True;
|
|
Warn_On_Bad_Fixed_Value := True;
|
|
Warn_On_Biased_Representation := True;
|
|
Warn_On_Constant := True;
|
|
Warn_On_Deleted_Code := True;
|
|
Warn_On_Dereference := True;
|
|
Warn_On_Export_Import := True;
|
|
Warn_On_Hiding := True;
|
|
Warn_On_Modified_Unread := True;
|
|
Warn_On_No_Value_Assigned := True;
|
|
Warn_On_Non_Local_Exception := True;
|
|
Warn_On_Object_Renames_Function := True;
|
|
Warn_On_Obsolescent_Feature := True;
|
|
Warn_On_Overlap := True;
|
|
Warn_On_Overridden_Size := True;
|
|
Warn_On_Parameter_Order := True;
|
|
Warn_On_Questionable_Missing_Parens := True;
|
|
Warn_On_Record_Holes := True;
|
|
Warn_On_Redundant_Constructs := True;
|
|
Warn_On_Reverse_Bit_Order := True;
|
|
Warn_On_Suspicious_Contract := True;
|
|
Warn_On_Unchecked_Conversion := True;
|
|
Warn_On_Unordered_Enumeration_Type := True;
|
|
Warn_On_Unrecognized_Pragma := True;
|
|
Warn_On_Unrepped_Components := True;
|
|
Warn_On_Warnings_Off := True;
|
|
|
|
when 'g' =>
|
|
Set_GNAT_Mode_Warnings;
|
|
|
|
when 'h' =>
|
|
Warn_On_Record_Holes := True;
|
|
|
|
when 'H' =>
|
|
Warn_On_Record_Holes := False;
|
|
|
|
when 'i' =>
|
|
Warn_On_Overlap := True;
|
|
|
|
when 'I' =>
|
|
Warn_On_Overlap := False;
|
|
|
|
when 'l' =>
|
|
List_Inherited_Aspects := True;
|
|
|
|
when 'L' =>
|
|
List_Inherited_Aspects := False;
|
|
|
|
when 'm' =>
|
|
Warn_On_Suspicious_Modulus_Value := True;
|
|
|
|
when 'M' =>
|
|
Warn_On_Suspicious_Modulus_Value := False;
|
|
|
|
when 'n' =>
|
|
Warn_On_Atomic_Synchronization := True;
|
|
|
|
when 'N' =>
|
|
Warn_On_Atomic_Synchronization := False;
|
|
|
|
when 'o' =>
|
|
Warn_On_All_Unread_Out_Parameters := True;
|
|
|
|
when 'O' =>
|
|
Warn_On_All_Unread_Out_Parameters := False;
|
|
|
|
when 'p' =>
|
|
Warn_On_Parameter_Order := True;
|
|
|
|
when 'P' =>
|
|
Warn_On_Parameter_Order := False;
|
|
|
|
when 'r' =>
|
|
Warn_On_Object_Renames_Function := True;
|
|
|
|
when 'R' =>
|
|
Warn_On_Object_Renames_Function := False;
|
|
|
|
when 's' =>
|
|
Warn_On_Overridden_Size := True;
|
|
|
|
when 'S' =>
|
|
Warn_On_Overridden_Size := False;
|
|
|
|
when 't' =>
|
|
Warn_On_Suspicious_Contract := True;
|
|
|
|
when 'T' =>
|
|
Warn_On_Suspicious_Contract := False;
|
|
|
|
when 'u' =>
|
|
Warn_On_Unordered_Enumeration_Type := True;
|
|
|
|
when 'U' =>
|
|
Warn_On_Unordered_Enumeration_Type := False;
|
|
|
|
when 'v' =>
|
|
Warn_On_Reverse_Bit_Order := True;
|
|
|
|
when 'V' =>
|
|
Warn_On_Reverse_Bit_Order := False;
|
|
|
|
when 'w' =>
|
|
Warn_On_Warnings_Off := True;
|
|
|
|
when 'W' =>
|
|
Warn_On_Warnings_Off := False;
|
|
|
|
when 'x' =>
|
|
Warn_On_Non_Local_Exception := True;
|
|
|
|
when 'X' =>
|
|
Warn_On_Non_Local_Exception := False;
|
|
No_Warn_On_Non_Local_Exception := True;
|
|
|
|
when others =>
|
|
return False;
|
|
end case;
|
|
|
|
return True;
|
|
end Set_Dot_Warning_Switch;
|
|
|
|
----------------------------
|
|
-- Set_GNAT_Mode_Warnings --
|
|
----------------------------
|
|
|
|
procedure Set_GNAT_Mode_Warnings is
|
|
begin
|
|
Address_Clause_Overlay_Warnings := True;
|
|
Check_Unreferenced := True;
|
|
Check_Unreferenced_Formals := True;
|
|
Check_Withs := True;
|
|
Constant_Condition_Warnings := True;
|
|
Elab_Warnings := False;
|
|
Implementation_Unit_Warnings := False;
|
|
Ineffective_Inline_Warnings := True;
|
|
List_Inherited_Aspects := False;
|
|
Warn_On_Ada_2005_Compatibility := True;
|
|
Warn_On_Ada_2012_Compatibility := True;
|
|
Warn_On_All_Unread_Out_Parameters := False;
|
|
Warn_On_Assertion_Failure := True;
|
|
Warn_On_Assumed_Low_Bound := True;
|
|
Warn_On_Atomic_Synchronization := False;
|
|
Warn_On_Bad_Fixed_Value := True;
|
|
Warn_On_Biased_Representation := True;
|
|
Warn_On_Constant := True;
|
|
Warn_On_Deleted_Code := False;
|
|
Warn_On_Dereference := False;
|
|
Warn_On_Export_Import := True;
|
|
Warn_On_Hiding := False;
|
|
Warn_On_Modified_Unread := True;
|
|
Warn_On_No_Value_Assigned := True;
|
|
Warn_On_Non_Local_Exception := False;
|
|
Warn_On_Object_Renames_Function := True;
|
|
Warn_On_Obsolescent_Feature := True;
|
|
Warn_On_Overlap := True;
|
|
Warn_On_Overridden_Size := True;
|
|
Warn_On_Parameter_Order := True;
|
|
Warn_On_Questionable_Missing_Parens := True;
|
|
Warn_On_Record_Holes := False;
|
|
Warn_On_Redundant_Constructs := True;
|
|
Warn_On_Reverse_Bit_Order := False;
|
|
Warn_On_Suspicious_Contract := True;
|
|
Warn_On_Unchecked_Conversion := True;
|
|
Warn_On_Unordered_Enumeration_Type := False;
|
|
Warn_On_Unrecognized_Pragma := True;
|
|
Warn_On_Unrepped_Components := False;
|
|
Warn_On_Warnings_Off := False;
|
|
end Set_GNAT_Mode_Warnings;
|
|
|
|
------------------------
|
|
-- Set_Warning_Switch --
|
|
------------------------
|
|
|
|
function Set_Warning_Switch (C : Character) return Boolean is
|
|
begin
|
|
case C is
|
|
when 'a' =>
|
|
Check_Unreferenced := True;
|
|
Check_Unreferenced_Formals := True;
|
|
Check_Withs := True;
|
|
Constant_Condition_Warnings := True;
|
|
Implementation_Unit_Warnings := True;
|
|
Ineffective_Inline_Warnings := True;
|
|
List_Inherited_Aspects := True;
|
|
Warn_On_Ada_2005_Compatibility := True;
|
|
Warn_On_Ada_2012_Compatibility := True;
|
|
Warn_On_Assertion_Failure := True;
|
|
Warn_On_Assumed_Low_Bound := True;
|
|
Warn_On_Bad_Fixed_Value := True;
|
|
Warn_On_Biased_Representation := True;
|
|
Warn_On_Constant := True;
|
|
Warn_On_Export_Import := True;
|
|
Warn_On_Modified_Unread := True;
|
|
Warn_On_No_Value_Assigned := True;
|
|
Warn_On_Non_Local_Exception := True;
|
|
Warn_On_Object_Renames_Function := True;
|
|
Warn_On_Obsolescent_Feature := True;
|
|
Warn_On_Parameter_Order := True;
|
|
Warn_On_Questionable_Missing_Parens := True;
|
|
Warn_On_Redundant_Constructs := True;
|
|
Warn_On_Reverse_Bit_Order := True;
|
|
Warn_On_Suspicious_Contract := True;
|
|
Warn_On_Unchecked_Conversion := True;
|
|
Warn_On_Unrecognized_Pragma := True;
|
|
Warn_On_Unrepped_Components := True;
|
|
|
|
when 'A' =>
|
|
Address_Clause_Overlay_Warnings := False;
|
|
Check_Unreferenced := False;
|
|
Check_Unreferenced_Formals := False;
|
|
Check_Withs := False;
|
|
Constant_Condition_Warnings := False;
|
|
Elab_Warnings := False;
|
|
Implementation_Unit_Warnings := False;
|
|
Ineffective_Inline_Warnings := False;
|
|
List_Inherited_Aspects := False;
|
|
Warn_On_Ada_2005_Compatibility := False;
|
|
Warn_On_Ada_2012_Compatibility := False;
|
|
Warn_On_All_Unread_Out_Parameters := False;
|
|
Warn_On_Assertion_Failure := False;
|
|
Warn_On_Assumed_Low_Bound := False;
|
|
Warn_On_Bad_Fixed_Value := False;
|
|
Warn_On_Biased_Representation := False;
|
|
Warn_On_Constant := False;
|
|
Warn_On_Deleted_Code := False;
|
|
Warn_On_Dereference := False;
|
|
Warn_On_Export_Import := False;
|
|
Warn_On_Hiding := False;
|
|
Warn_On_Modified_Unread := False;
|
|
Warn_On_No_Value_Assigned := False;
|
|
Warn_On_Non_Local_Exception := False;
|
|
Warn_On_Object_Renames_Function := False;
|
|
Warn_On_Obsolescent_Feature := False;
|
|
Warn_On_Overlap := False;
|
|
Warn_On_Overridden_Size := False;
|
|
Warn_On_Parameter_Order := False;
|
|
Warn_On_Record_Holes := False;
|
|
Warn_On_Questionable_Missing_Parens := False;
|
|
Warn_On_Redundant_Constructs := False;
|
|
Warn_On_Reverse_Bit_Order := False;
|
|
Warn_On_Suspicious_Contract := False;
|
|
Warn_On_Unchecked_Conversion := False;
|
|
Warn_On_Unordered_Enumeration_Type := False;
|
|
Warn_On_Unrecognized_Pragma := False;
|
|
Warn_On_Unrepped_Components := False;
|
|
Warn_On_Warnings_Off := False;
|
|
|
|
No_Warn_On_Non_Local_Exception := True;
|
|
|
|
when 'b' =>
|
|
Warn_On_Bad_Fixed_Value := True;
|
|
|
|
when 'B' =>
|
|
Warn_On_Bad_Fixed_Value := False;
|
|
|
|
when 'c' =>
|
|
Constant_Condition_Warnings := True;
|
|
|
|
when 'C' =>
|
|
Constant_Condition_Warnings := False;
|
|
|
|
when 'd' =>
|
|
Warn_On_Dereference := True;
|
|
|
|
when 'D' =>
|
|
Warn_On_Dereference := False;
|
|
|
|
when 'e' =>
|
|
Warning_Mode := Treat_As_Error;
|
|
|
|
when 'f' =>
|
|
Check_Unreferenced_Formals := True;
|
|
|
|
when 'F' =>
|
|
Check_Unreferenced_Formals := False;
|
|
|
|
when 'g' =>
|
|
Warn_On_Unrecognized_Pragma := True;
|
|
|
|
when 'G' =>
|
|
Warn_On_Unrecognized_Pragma := False;
|
|
|
|
when 'h' =>
|
|
Warn_On_Hiding := True;
|
|
|
|
when 'H' =>
|
|
Warn_On_Hiding := False;
|
|
|
|
when 'i' =>
|
|
Implementation_Unit_Warnings := True;
|
|
|
|
when 'I' =>
|
|
Implementation_Unit_Warnings := False;
|
|
|
|
when 'j' =>
|
|
Warn_On_Obsolescent_Feature := True;
|
|
|
|
when 'J' =>
|
|
Warn_On_Obsolescent_Feature := False;
|
|
|
|
when 'k' =>
|
|
Warn_On_Constant := True;
|
|
|
|
when 'K' =>
|
|
Warn_On_Constant := False;
|
|
|
|
when 'l' =>
|
|
Elab_Warnings := True;
|
|
|
|
when 'L' =>
|
|
Elab_Warnings := False;
|
|
|
|
when 'm' =>
|
|
Warn_On_Modified_Unread := True;
|
|
|
|
when 'M' =>
|
|
Warn_On_Modified_Unread := False;
|
|
|
|
when 'n' =>
|
|
Warning_Mode := Normal;
|
|
|
|
when 'o' =>
|
|
Address_Clause_Overlay_Warnings := True;
|
|
|
|
when 'O' =>
|
|
Address_Clause_Overlay_Warnings := False;
|
|
|
|
when 'p' =>
|
|
Ineffective_Inline_Warnings := True;
|
|
|
|
when 'P' =>
|
|
Ineffective_Inline_Warnings := False;
|
|
|
|
when 'q' =>
|
|
Warn_On_Questionable_Missing_Parens := True;
|
|
|
|
when 'Q' =>
|
|
Warn_On_Questionable_Missing_Parens := False;
|
|
|
|
when 'r' =>
|
|
Warn_On_Redundant_Constructs := True;
|
|
|
|
when 'R' =>
|
|
Warn_On_Redundant_Constructs := False;
|
|
|
|
when 's' =>
|
|
Warning_Mode := Suppress;
|
|
|
|
when 't' =>
|
|
Warn_On_Deleted_Code := True;
|
|
|
|
when 'T' =>
|
|
Warn_On_Deleted_Code := False;
|
|
|
|
when 'u' =>
|
|
Check_Unreferenced := True;
|
|
Check_Withs := True;
|
|
Check_Unreferenced_Formals := True;
|
|
|
|
when 'U' =>
|
|
Check_Unreferenced := False;
|
|
Check_Withs := False;
|
|
Check_Unreferenced_Formals := False;
|
|
|
|
when 'v' =>
|
|
Warn_On_No_Value_Assigned := True;
|
|
|
|
when 'V' =>
|
|
Warn_On_No_Value_Assigned := False;
|
|
|
|
when 'w' =>
|
|
Warn_On_Assumed_Low_Bound := True;
|
|
|
|
when 'W' =>
|
|
Warn_On_Assumed_Low_Bound := False;
|
|
|
|
when 'x' =>
|
|
Warn_On_Export_Import := True;
|
|
|
|
when 'X' =>
|
|
Warn_On_Export_Import := False;
|
|
|
|
when 'y' =>
|
|
Warn_On_Ada_2005_Compatibility := True;
|
|
Warn_On_Ada_2012_Compatibility := True;
|
|
|
|
when 'Y' =>
|
|
Warn_On_Ada_2005_Compatibility := False;
|
|
Warn_On_Ada_2012_Compatibility := False;
|
|
|
|
when 'z' =>
|
|
Warn_On_Unchecked_Conversion := True;
|
|
|
|
when 'Z' =>
|
|
Warn_On_Unchecked_Conversion := False;
|
|
|
|
when others =>
|
|
return False;
|
|
end case;
|
|
|
|
return True;
|
|
end Set_Warning_Switch;
|
|
|
|
end Warnsw;
|