On Tue, Jan 3, 2017 at 7:19 PM, Jeff Law <l...@redhat.com> wrote:
> On 01/02/2017 10:29 PM, Alexandre Oliva wrote:
>>
>> 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, but
>> then, it's not as efficient as testing the index itself against the
>> limit.
>>
>> Regstrapped on x86_64-linux-gnu and i686-linux-gnu.  OK to install?
>>
>> for  gcc/fortran/ChangeLog
>>
>>         * simplify.c (simplify_transformation_to_array): Assert the
>>         array access is in range.  Fix whitespace.

But once we default to release checking it will warn again?  That said, I think
this kind of workaround is bad :/

Richard.

> OK.
> jeff
>

Reply via email to