This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug ada/61466] New: Array index check optimized away


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.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]