1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- V A L I D S W -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 2001-2018, 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-- This unit contains the routines used to handle setting of validity 27-- checking options. 28 29package Validsw is 30 31 ----------------------------- 32 -- Validity Check Switches -- 33 ----------------------------- 34 35 -- The following flags determine the specific set of validity checks 36 -- to be made if validity checking is active (Validity_Checks_On = True) 37 38 -- See GNAT users guide for an exact description of each option. The letter 39 -- given in the comment is the letter used in the -gnatV compiler switch 40 -- or in the argument of a Validity_Checks pragma to activate the option. 41 -- The corresponding upper case letter deactivates the option. 42 43 Validity_Check_Copies : Boolean := False; 44 -- Controls the validity checking of copies. If this switch is set to 45 -- true using -gnatVc, or a 'c' in the argument of a Validity_Checks 46 -- pragma, then the right side of assignments and also initializing 47 -- expressions in object declarations are checked for validity. 48 49 Validity_Check_Components : Boolean := False; 50 -- Controls validity checking for assignment to elementary components of 51 -- records. If this switch is set true using -gnatVe, or an 'e' in the 52 -- argument of Validity_Checks pragma, then the right hand of an assignment 53 -- to such a component is checked for validity. 54 55 Validity_Check_Default : Boolean := True; 56 -- Controls default (reference manual) validity checking. If this switch is 57 -- set to True using -gnatVd or a 'd' in the argument of a Validity_Checks 58 -- pragma (or the initial default value is used, set True), then left side 59 -- subscripts and case statement arguments are checked for validity. This 60 -- switch is also set by default if no -gnatV switch is used and no 61 -- Validity_Checks pragma is processed. 62 63 Validity_Check_Floating_Point : Boolean := False; 64 -- Normally validity checking applies only to discrete values (integer 65 -- and enumeration types). If this switch is set to True using -gnatVf 66 -- or an 'f' in the argument of a Validity_Checks pragma, then floating- 67 -- point values are also checked. The context in which such checks 68 -- occur depends on other flags, e.g. if Validity_Check_Copies is also 69 -- set then floating-point values on the right side of an assignment 70 -- will be validity checked. 71 72 Validity_Check_In_Out_Params : Boolean := False; 73 -- Controls the validity checking of IN OUT parameters. If this switch 74 -- is set to True using -gnatVm or a 'm' in the argument of a pragma 75 -- Validity_Checks, then the initial value of all IN OUT parameters 76 -- will be checked at the point of call of a procedure. Note that the 77 -- character 'm' here stands for modified (parameters). 78 79 Validity_Check_In_Params : Boolean := False; 80 -- Controls the validity checking of IN parameters. If this switch is 81 -- set to True using -gnatVi or an 'i' in the argument of a pragma 82 -- Validity_Checks, then the initial value of all IN parameters 83 -- will be checked at the point of call of a procedure or function. 84 85 Validity_Check_Operands : Boolean := False; 86 -- Controls validity checking of operands. If this switch is set to 87 -- True using -gnatVo or an 'o' in the argument of a Validity_Checks 88 -- pragma, then operands of all predefined operators and attributes 89 -- will be validity checked. 90 91 Validity_Check_Parameters : Boolean := False; 92 -- This controls validity treatment for parameters within a subprogram. 93 -- Normally if validity checking is enabled for parameters on a call 94 -- (Validity_Check_In[_Out]_Params) then an assumption is made that the 95 -- parameter values are valid on entry and not checked again within a 96 -- procedure. Setting Validity_Check_Parameters removes this assumption 97 -- and ensures that no assumptions are made about parameters, so that 98 -- they will always be checked. 99 100 Validity_Check_Returns : Boolean := False; 101 -- Controls validity checking of returned values. If this switch is set 102 -- to True using -gnatVr, or an 'r' in the argument of a Validity_Checks 103 -- pragma, then the expression in a RETURN statement is validity checked. 104 105 Validity_Check_Subscripts : Boolean := False; 106 -- Controls validity checking of subscripts. If this switch is set to 107 -- True using -gnatVs, or an 's' in the argument of a Validity_Checks 108 -- pragma, then all subscripts are checked for validity. Note that left 109 -- side subscript checking is controlled also by Validity_Check_Default. 110 -- If Validity_Check_Subscripts is True, then all subscripts are checked, 111 -- otherwise if Validity_Check_Default is True, then left side subscripts 112 -- are checked, otherwise no subscripts are checked. 113 114 Validity_Check_Tests : Boolean := False; 115 -- Controls validity checking of tests that occur in conditions (i.e. the 116 -- tests in IF, WHILE, and EXIT statements, and in entry guards). If this 117 -- switch is set to True using -gnatVt, or a 't' in the argument of a 118 -- Validity_Checks pragma, then all such conditions are validity checked. 119 120 Force_Validity_Checks : Boolean := False; 121 -- Normally, operands that do not come from source (i.e. cases of expander 122 -- generated code) are not checked, if this flag is set True, then checking 123 -- of such operands is forced (if Validity_Check_Operands is set). 124 125 ----------------- 126 -- Subprograms -- 127 ----------------- 128 129 procedure Set_Default_Validity_Check_Options; 130 -- This procedure is called to set the default validity checking options 131 -- that apply if no Validity_Check switches or pragma is given. 132 133 procedure Set_Validity_Check_Options 134 (Options : String; 135 OK : out Boolean; 136 Err_Col : out Natural); 137 -- This procedure is called to set the validity check options that 138 -- correspond to the characters in the given Options string. If 139 -- all options are valid, then Set_Default_Validity_Check_Options 140 -- is first called to set the defaults, and then the options in the 141 -- given string are set in an additive manner. If any invalid character 142 -- is found, then OK is False on exit, and Err_Col is the index in 143 -- in options of the bad character. If all options are valid, then 144 -- OK is True on return, and Err_Col is set to options'Last + 1. 145 146 procedure Set_Validity_Check_Options (Options : String); 147 -- Like the above procedure, except that the call is simply ignored if 148 -- there are any error conditions, this is for example appropriate for 149 -- calls where the string is known to be valid, e.g. because it was 150 -- obtained by Save_Validity_Check_Options. 151 152 procedure Reset_Validity_Check_Options; 153 -- Sets all validity check options to off 154 155 subtype Validity_Check_Options is String (1 .. 16); 156 -- Long enough string to hold all options from Save call below 157 158 procedure Save_Validity_Check_Options 159 (Options : out Validity_Check_Options); 160 -- Sets Options to represent current selection of options. This 161 -- set can be restored by first calling Reset_Validity_Check_Options, 162 -- and then calling Set_Validity_Check_Options with the Options string. 163 164end Validsw; 165