From: Bob Duff Date: Tue, 23 Feb 2021 20:50:21 +0000 (-0500) Subject: [Ada] Fix missing array bounds checking X-Git-Tag: basepoints/gcc-13~6810 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1ac6fcf57c55ec2cac914b64d5d56a341a5aa4f0;p=thirdparty%2Fgcc.git [Ada] Fix missing array bounds checking gcc/ada/ * ghost.adb: Add another special case where full analysis is needed. This bug is due to quirks in the way Mark_And_Set_Ghost_Assignment works (it happens very early, before name resolution is done). --- diff --git a/gcc/ada/ghost.adb b/gcc/ada/ghost.adb index f95bd19c5045..42ea0f52cf33 100644 --- a/gcc/ada/ghost.adb +++ b/gcc/ada/ghost.adb @@ -1245,11 +1245,21 @@ package body Ghost is -- processing them in that mode can lead to spurious errors. if Expander_Active then + -- Cases where full analysis is needed, involving array indexing + -- which would otherwise be missing array-bounds checks: + if not Analyzed (Orig_Lhs) - and then Nkind (Orig_Lhs) = N_Indexed_Component - and then Nkind (Prefix (Orig_Lhs)) = N_Selected_Component - and then Nkind (Prefix (Prefix (Orig_Lhs))) = - N_Indexed_Component + and then + ((Nkind (Orig_Lhs) = N_Indexed_Component + and then Nkind (Prefix (Orig_Lhs)) = N_Selected_Component + and then Nkind (Prefix (Prefix (Orig_Lhs))) = + N_Indexed_Component) + or else + (Nkind (Orig_Lhs) = N_Selected_Component + and then Nkind (Prefix (Orig_Lhs)) = N_Indexed_Component + and then Nkind (Prefix (Prefix (Orig_Lhs))) = + N_Selected_Component + and then Nkind (Parent (N)) /= N_Loop_Statement)) then Analyze (Orig_Lhs); end if;