[genattrtab] Fix memory corruption, allocate enough memory for all bypassed reservations

* genattrtab.c (n_bypassed): New variable.
	(process_bypasses): Initialise n_bypassed.
	Count number of bypassed reservations.
	(make_automaton_attrs): Allocate space for bypassed reservations
	rather than number of bypasses.

From-SVN: r211771
This commit is contained in:
Kyrylo Tkachov 2014-06-18 08:07:16 +00:00 committed by Kyrylo Tkachov
parent 25b7069af2
commit 419d45db8e
2 changed files with 17 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2014-06-18 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* genattrtab.c (n_bypassed): New variable.
(process_bypasses): Initialise n_bypassed.
Count number of bypassed reservations.
(make_automaton_attrs): Allocate space for bypassed reservations
rather than number of bypasses.
2014-06-18 Richard Biener <rguenther@suse.de>
* tree-ssa-propagate.c (replace_phi_args_in): Return whether

View File

@ -4766,6 +4766,7 @@ struct bypass_list
static struct bypass_list *all_bypasses;
static size_t n_bypasses;
static size_t n_bypassed;
static void
gen_bypass_1 (const char *s, size_t len)
@ -4811,12 +4812,18 @@ process_bypasses (void)
struct bypass_list *b;
struct insn_reserv *r;
n_bypassed = 0;
/* The reservation list is likely to be much longer than the bypass
list. */
for (r = all_insn_reservs; r; r = r->next)
for (b = all_bypasses; b; b = b->next)
if (fnmatch (b->pattern, r->name, 0) == 0)
r->bypassed = true;
{
n_bypassed++;
r->bypassed = true;
break;
}
}
/* Check that attribute NAME is used in define_insn_reservation condition
@ -5075,7 +5082,7 @@ make_automaton_attrs (void)
process_bypasses ();
byps_exp = rtx_alloc (COND);
XVEC (byps_exp, 0) = rtvec_alloc (n_bypasses * 2);
XVEC (byps_exp, 0) = rtvec_alloc (n_bypassed * 2);
XEXP (byps_exp, 1) = make_numeric_value (0);
for (decl = all_insn_reservs, i = 0;
decl;