diff options
author | Justin Squirek <squirek@adacore.com> | 2023-02-09 17:00:46 +0000 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2023-05-22 10:46:12 +0200 |
commit | 6675552bacd41361d8d445438cb6d978d44c1402 (patch) | |
tree | 3e33ec4bc86ee4683ad8512202d4d72adcdde028 | |
parent | eb16654e44775841f82488311fcf08ef521756d9 (diff) | |
download | gcc-6675552bacd41361d8d445438cb6d978d44c1402.zip gcc-6675552bacd41361d8d445438cb6d978d44c1402.tar.gz gcc-6675552bacd41361d8d445438cb6d978d44c1402.tar.bz2 |
ada: Incorrect constant folding in postcondition involving 'Old
The following patch fixes an issue in the compiler whereby certain flavors of
access comparisons may be incorrectly constant-folded out of contract
expressions - notably in postcondition expressions featuring a reference to
'Old.
gcc/ada/
* checks.adb (Install_Null_Excluding_Check): Avoid non-null
optimizations when assertions are enabled.
-rw-r--r-- | gcc/ada/checks.adb | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index 9f3c679..0d47296 100644 --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -8437,7 +8437,18 @@ package body Checks is Right_Opnd => Make_Null (Loc)), Reason => CE_Access_Check_Failed)); - Mark_Non_Null; + -- Mark the entity of N "non-null" except when assertions are enabled - + -- since expansion becomes much more complicated (especially when it + -- comes to contracts) due to the generation of wrappers and wholesale + -- moving of declarations and statements which may happen. + + -- Additionally, it is assumed that extra checks will exist with + -- assertions enabled so some potentially redundant checks are + -- acceptable. + + if not Assertions_Enabled then + Mark_Non_Null; + end if; end Install_Null_Excluding_Check; ----------------------------------------- |