diff options
author | Gary Dismukes <dismukes@adacore.com> | 2020-05-11 10:34:26 -0400 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-07-07 05:26:55 -0400 |
commit | 58e07eaae447b73763ae390a13a613a6b70679ce (patch) | |
tree | aead85c6db7ae2183e7a3b9e16c8681f0cc8b627 /gcc/ada/contracts.adb | |
parent | 845c49360bca4553676d5a33603d5099e7cf6d85 (diff) | |
download | gcc-58e07eaae447b73763ae390a13a613a6b70679ce.zip gcc-58e07eaae447b73763ae390a13a613a6b70679ce.tar.gz gcc-58e07eaae447b73763ae390a13a613a6b70679ce.tar.bz2 |
[Ada] Checking type invariants on in params of procedures, not functions (AI12-0044)
gcc/ada/
* contracts.adb (Add_Invariant_And_Predicate_Checks): Relax the
condition for doing invariant checks so that in-mode parameters
of procedures are also checked (required by AI05-0289, and
restricted to procedures by AI12-0044). This is done in a
procedure's nested postconditions procedure.
* exp_ch6.adb (Expand_Actuals): Also perform postcall invariant
checks for in parameters of procedures (but not functions).
Moved invariant-checking code to end of Expand_Actuals
(including the nested function Is_Public_Subp).
Diffstat (limited to 'gcc/ada/contracts.adb')
-rw-r--r-- | gcc/ada/contracts.adb | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/ada/contracts.adb b/gcc/ada/contracts.adb index 337e4b6..9931334 100644 --- a/gcc/ada/contracts.adb +++ b/gcc/ada/contracts.adb @@ -1864,13 +1864,15 @@ package body Contracts is Add_Invariant_Access_Checks (Result); end if; - -- Add invariant and predicates for all formals that qualify + -- Add invariant checks for all formals that qualify (see AI05-0289 + -- and AI12-0044). Formal := First_Formal (Subp_Id); while Present (Formal) loop Typ := Etype (Formal); if Ekind (Formal) /= E_In_Parameter + or else Ekind (Subp_Id) = E_Procedure or else Is_Access_Type (Typ) then if Invariant_Checks_OK (Typ) then |