out of bounds access in insn-automata.c
Bernd Schmidt
bernds_cb1@t-online.de
Wed Mar 23 15:26:00 GMT 2016
On 03/23/2016 07:32 AM, Aldy Hernandez wrote:
>
> int
> maximal_insn_latency (rtx insn)
> {
> int insn_code;
>
> if (insn == 0)
> insn_code = DFA__ADVANCE_CYCLE;
>
>
> else
> {
> insn_code = dfa_insn_code (as_a <rtx_insn *> (insn));
> if (insn_code > DFA__ADVANCE_CYCLE)
> return 0;
> }
> return internal_maximal_insn_latency (insn_code, insn);
> }
>
> In the case where insn==0, insn_code is set to the size of
> default_latencies[] which will get accessed in the return.
>
> Does insn==0 never happen?
I suspect it never happens in this function. I'd add a gcc_assert to
that effect and try a bootstrap/test. Hmm, it seems to be a sel-sched
only thing so a normal bootstrap would be meaningless, but from the
context it looks fairly clearly like insn is always nonnull.
It looks like this block of code is written by a helper function that is
really intended for other purposes than for maximal_insn_latency. Might
be worth changing to
int insn_code = dfa_insn_code (as_a <rtx_insn *> (insn));
gcc_assert (insn_code <= DFA__ADVANCE_CYCLE);
Bernd
More information about the Gcc
mailing list