From 7de5bcccabe7577efb9e734e5534a2318b1f3703 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 8 Jul 2004 09:39:17 +0000 Subject: vec.c (vec_p_reserve, [...]): Allocation is signed. .: * vec.c (vec_p_reserve, vec_o_reserve): Allocation is signed. * vec.h (VEC_alloc, VEC_embedded_size, VEC_embedded_init): Allocation is signed. (VEC_reserve): Return flag, allocation is signed. cp: * name-lookup.c (push_binding): Use VEC_reserve. From-SVN: r84281 --- gcc/vec.c | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) (limited to 'gcc/vec.c') diff --git a/gcc/vec.c b/gcc/vec.c index 01faf52bd78..9d1d8b2d257 100644 --- a/gcc/vec.c +++ b/gcc/vec.c @@ -34,44 +34,45 @@ struct vec_prefix void *vec[1]; }; -/* Ensure there are at least RESERVE free slots in VEC, if RESERVE != - ~0u. If RESERVE == ~0u increase the current allocation - exponentially. VEC can be NULL, to create a new vector. */ +/* Ensure there are at least RESERVE free slots in VEC, if RESERVE >= + 0. If RESERVE < 0 increase the current allocation exponentially. + VEC can be NULL, to create a new vector. */ void * -vec_p_reserve (void *vec, size_t reserve MEM_STAT_DECL) +vec_p_reserve (void *vec, int reserve MEM_STAT_DECL) { return vec_o_reserve (vec, reserve, offsetof (struct vec_prefix, vec), sizeof (void *) PASS_MEM_STAT); } -/* Ensure there are at least RESERVE free slots in VEC, if RESERVE != - ~0u. If RESERVE == ~0u, increase the current allocation - exponentially. VEC can be NULL, in which case a new vector is - created. The vector's trailing array is at VEC_OFFSET offset and - consistes of ELT_SIZE sized elements. */ +/* Ensure there are at least RESERVE free slots in VEC, if RESERVE >= + 0. If RESERVE < 0, increase the current allocation exponentially. + VEC can be NULL, in which case a new vector is created. The + vector's trailing array is at VEC_OFFSET offset and consistes of + ELT_SIZE sized elements. */ void * -vec_o_reserve (void *vec, size_t reserve, size_t vec_offset, size_t elt_size +vec_o_reserve (void *vec, int reserve, size_t vec_offset, size_t elt_size MEM_STAT_DECL) { struct vec_prefix *pfx = vec; - size_t alloc; + size_t alloc = pfx ? pfx->num : 0; - if (reserve + 1) - alloc = (pfx ? pfx->num : 0) + reserve; + if (reserve >= 0) + alloc += reserve; + else if (alloc) + alloc *= 2; else - alloc = pfx ? pfx->alloc * 2 : 4; + alloc = 4; + + if (pfx && pfx->alloc >= alloc) + abort (); - if (!pfx || pfx->alloc < alloc) - { - vec = ggc_realloc_stat (vec, vec_offset + alloc * elt_size - PASS_MEM_STAT); - ((struct vec_prefix *)vec)->alloc = alloc; - if (!pfx) - ((struct vec_prefix *)vec)->num = 0; - } + vec = ggc_realloc_stat (vec, vec_offset + alloc * elt_size PASS_MEM_STAT); + ((struct vec_prefix *)vec)->alloc = alloc; + if (!pfx) + ((struct vec_prefix *)vec)->num = 0; return vec; } -- cgit v1.2.1