https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61466
Bug ID: 61466 Summary: Array index check optimized away Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: ada Assignee: unassigned at gcc dot gnu.org Reporter: simon at pushface dot org Created attachment 32916 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=32916&action=edit Source code (package spec/body, main procedure) In the attached code, the index check in procedure Violate on the “Output: out Arr” parameter is present with -O0 but is omitted with higher levels. This is clearly visible with -gnatG: -O0: L_1 : for j in input'first .. input'last loop B_2 : declare [constraint_error when not (integer(j) in modifier'first .. modifier'last) "index check failed"] product : constant integer := modifier (j); begin [constraint_error when not (integer(j) in output'first .. output'last) "index check failed"] output (j) := product / 2; end B_2; end loop L_1; -O1: L_1 : for j in input'first .. input'last loop B_2 : declare [constraint_error when not (integer(j) in modifier'first .. modifier'last) "index check failed"] product : constant integer := modifier (j); begin output (j) := product / 2; end B_2; end loop L_1; The bug is present at least in GCC 4.6 on Debian and GCC 4.7 .. 4.9 on Mac OS X, also in GNAT GPL 2012 .. 2014.