From: Justin Squirek Date: Thu, 9 Feb 2023 17:00:46 +0000 (+0000) Subject: ada: Incorrect constant folding in postcondition involving 'Old X-Git-Tag: basepoints/gcc-15~9076 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6675552bacd41361d8d445438cb6d978d44c1402;p=thirdparty%2Fgcc.git 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. --- diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index 9f3c679ed7e1..0d472964ff51 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; -----------------------------------------