mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-08 06:40:25 +08:00
[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:
parent
25b7069af2
commit
419d45db8e
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user