From a220410be70264a0e4089c4d63a9c22dd688ca7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3?= Date: Mon, 7 Oct 2019 13:16:42 +0900 Subject: [PATCH] annotate malloc-ish functions Make them gcc friendly. Note that realloc canot be __malloc__ attributed, according to the GCC manual. --- include/ruby/defines.h | 15 ++++++++++++--- internal.h | 7 ++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/include/ruby/defines.h b/include/ruby/defines.h index 72ec11d89f..0d95209b02 100644 --- a/include/ruby/defines.h +++ b/include/ruby/defines.h @@ -221,9 +221,18 @@ RUBY_SYMBOL_EXPORT_BEGIN # define RUBY_ATTR_ALLOC_SIZE(params) #endif -void *ruby_xmalloc(size_t) RUBY_ATTR_ALLOC_SIZE((1)); -void *ruby_xmalloc2(size_t,size_t) RUBY_ATTR_ALLOC_SIZE((1,2)); -void *ruby_xcalloc(size_t,size_t) RUBY_ATTR_ALLOC_SIZE((1,2)); +#ifdef __has_attribute +# if __has_attribute(malloc) +# define RUBY_ATTR_MALLOC __attribute__((__malloc__)) +# endif +#endif +#ifndef RUBY_ATTR_MALLOC +# define RUBY_ATTR_MALLOC +#endif + +void *ruby_xmalloc(size_t) RUBY_ATTR_MALLOC RUBY_ATTR_ALLOC_SIZE((1)); +void *ruby_xmalloc2(size_t,size_t) RUBY_ATTR_MALLOC RUBY_ATTR_ALLOC_SIZE((1,2)); +void *ruby_xcalloc(size_t,size_t) RUBY_ATTR_MALLOC RUBY_ATTR_ALLOC_SIZE((1,2)); void *ruby_xrealloc(void*,size_t) RUBY_ATTR_ALLOC_SIZE((2)); void *ruby_xrealloc2(void*,size_t,size_t) RUBY_ATTR_ALLOC_SIZE((2,3)); void ruby_xfree(void*); diff --git a/internal.h b/internal.h index 6956427a78..3f57523bd3 100644 --- a/internal.h +++ b/internal.h @@ -1639,7 +1639,12 @@ RUBY_SYMBOL_EXPORT_END rb_wb_unprotected_newobj_of(klass, flags)) #define NEWOBJ_OF(obj,type,klass,flags) RB_NEWOBJ_OF(obj,type,klass,flags) -void *rb_aligned_malloc(size_t, size_t); +#ifdef __has_attribute +#if __has_attribute(alloc_align) +__attribute__((__alloc_align__(1))) +#endif +#endif +void *rb_aligned_malloc(size_t, size_t) RUBY_ATTR_MALLOC RUBY_ATTR_ALLOC_SIZE((2)); void rb_aligned_free(void *); /* hash.c */