[bootstrap-O3,fortran] silence warning in simplify_transformation_to_array
commite1d070a4f7128f98c1d5aa504ec44f41d0ac1a5a
authorAlexandre Oliva <aoliva@redhat.com>
Fri, 6 Jan 2017 03:34:37 +0000 (6 03:34 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Fri, 6 Jan 2017 03:34:37 +0000 (6 03:34 +0000)
tree7b466ed0799e625e763641ce9cfaf53ee9cde2eb
parent435f3f7adf6c1ae34547c4859205f4ec7beb8a93
[bootstrap-O3,fortran] silence warning in simplify_transformation_to_array

simplify_transformation_to_array had the nested loop unrolled 7 times,
which is reasonable given that it iterates over arrays of size
GFC_MAX_DIMENSIONS == 7.

The problem is that the last iteration increments the index, tests
that it's less than result->rank, and then accesses the arrays with
the incremented index.

We did not optimize out that part in the 7th iteration, so VRP flagged
the unreachable code as accessing arrays past the end.

It couldn't possibly know that we'd never reach that part, since the
test was on result->rank, and it's not obvious (for the compiler) that
result->rank <= GFC_MAX_DIMENSIONS.

Even an assert to that effect before the enclosing loop didn't avoid
the warning turned to error, though; I suppose there might be some
aliasing at play, because moving the assert into the loop does.  An
assert on the index itself would also work, even more efficiently, but
we're just silencing the warning instead.

for  gcc/fortran/ChangeLog

* simplify.c (simplify_transformation_to_array): Silence
array bounds warning.  Fix whitespace.

From-SVN: r244122
gcc/fortran/ChangeLog
gcc/fortran/simplify.c