From c458c493667bde30c22760e3a1839f2cac6e6447 Mon Sep 17 00:00:00 2001 From: Andreas Schultz Date: Thu, 26 Mar 2020 14:18:52 +0000 Subject: vppinfra: type prove vec_new and vec_resize Some vector functions (e.g. vec_new) pass the vector pointer through vec_resize. This turn the pointer from a real type into a void pointer. Explicitly cast the pointer back to its original type to catch type mismatches. Type: improvement Signed-off-by: Andreas Schultz Change-Id: Id13e52d4f038af2cee28e5abf1aca720f8909378 --- src/vppinfra/vec.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/vppinfra/vec.h') diff --git a/src/vppinfra/vec.h b/src/vppinfra/vec.h index e9836107799..df913c2b144 100644 --- a/src/vppinfra/vec.h +++ b/src/vppinfra/vec.h @@ -116,8 +116,12 @@ void *vec_resize_allocate_memory (void *v, @return v_prime pointer to resized vector, may or may not equal v */ -#define _vec_resize_numa(V,L,DB,HB,A,S) \ - _vec_resize_inline(V,L,DB,HB,clib_max((__alignof__((V)[0])),(A)),(S)) +#define _vec_resize_numa(V,L,DB,HB,A,S) \ +({ \ + __typeof__ ((V)) _V; \ + _V = _vec_resize_inline(V,L,DB,HB,clib_max((__alignof__((V)[0])),(A)),(S)); \ + _V; \ +}) #define _vec_resize(V,L,DB,HB,A) \ _vec_resize_numa(V,L,DB,HB,A,VEC_NUMA_UNSPECIFIED) @@ -330,10 +334,10 @@ do { \ @param A alignment (may be zero) @return V new vector */ -#define vec_new_ha(T,N,H,A) \ -({ \ - word _v(n) = (N); \ - _vec_resize ((T *) 0, _v(n), _v(n) * sizeof (T), (H), (A)); \ +#define vec_new_ha(T,N,H,A) \ +({ \ + word _v(n) = (N); \ + (T *)_vec_resize ((T *) 0, _v(n), _v(n) * sizeof (T), (H), (A)); \ }) /** \brief Create new vector of given type and length -- cgit 1.2.3-korg