[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r117139: Supply malloc and alloc_size attributes for
From: |
Paul Eggert |
Subject: |
[Emacs-diffs] trunk r117139: Supply malloc and alloc_size attributes for extern allocators. |
Date: |
Thu, 22 May 2014 16:40:42 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 117139
revision-id: address@hidden
parent: address@hidden
committer: Paul Eggert <address@hidden>
branch nick: trunk
timestamp: Thu 2014-05-22 09:40:35 -0700
message:
Supply malloc and alloc_size attributes for extern allocators.
This documents the C API, and helps GCC generate a bit better code.
* conf_post.h (ATTRIBUTE_MALLOC, ATTRIBUTE_ALLOC_SIZE)
(ATTRIBUTE_MALLOC_SIZE): New macros.
* gmalloc.c (malloc, realloc, calloc):
* gtkutil.h (malloc_widget_value):
* lisp.h (ralloc, r_re_alloc, xmalloc, xzalloc, xrealloc, xnmalloc)
(xnrealloc, xstrdup, xlispstrdup, record_xmalloc):
Use them.
modified:
src/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1438
src/conf_post.h conf_post.h-20120730211826-q0qbxxwh2emw52hd-1
src/gmalloc.c gmalloc.c-20091113204419-o5vbwnq5f7feedwu-1085
src/gtkutil.h gtkutil.h-20091113204419-o5vbwnq5f7feedwu-2528
src/lisp.h lisp.h-20091113204419-o5vbwnq5f7feedwu-253
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2014-05-21 19:51:58 +0000
+++ b/src/ChangeLog 2014-05-22 16:40:35 +0000
@@ -1,3 +1,15 @@
+2014-05-22 Paul Eggert <address@hidden>
+
+ Supply malloc and alloc_size attributes for extern allocators.
+ This documents the C API, and helps GCC generate a bit better code.
+ * conf_post.h (ATTRIBUTE_MALLOC, ATTRIBUTE_ALLOC_SIZE)
+ (ATTRIBUTE_MALLOC_SIZE): New macros.
+ * gmalloc.c (malloc, realloc, calloc):
+ * gtkutil.h (malloc_widget_value):
+ * lisp.h (ralloc, r_re_alloc, xmalloc, xzalloc, xrealloc, xnmalloc)
+ (xnrealloc, xstrdup, xlispstrdup, record_xmalloc):
+ Use them.
+
2014-05-21 Paul Eggert <address@hidden>
Don't assume that ImageMagick uses a 16-bit quantum (Bug#17519).
=== modified file 'src/conf_post.h'
--- a/src/conf_post.h 2014-05-17 08:11:31 +0000
+++ b/src/conf_post.h 2014-05-22 16:40:35 +0000
@@ -225,6 +225,20 @@
#define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST
+#if 3 <= __GNUC__
+# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+#else
+# define ATTRIBUTE_MALLOC
+#endif
+
+#if 4 < __GNUC__ + (3 <= __GNUC_MINOR__)
+# define ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args))
+#else
+# define ATTRIBUTE_ALLOC_SIZE(args)
+#endif
+
+#define ATTRIBUTE_MALLOC_SIZE(args) ATTRIBUTE_MALLOC ATTRIBUTE_ALLOC_SIZE
(args)
+
/* Work around GCC bug 59600: when a function is inlined, the inlined
code may have its addresses sanitized even if the function has the
no_sanitize_address attribute. This bug is fixed in GCC 4.9.0 and
=== modified file 'src/gmalloc.c'
--- a/src/gmalloc.c 2014-03-04 19:02:49 +0000
+++ b/src/gmalloc.c 2014-05-22 16:40:35 +0000
@@ -51,12 +51,12 @@
/* Allocate SIZE bytes of memory. */
-extern void *malloc (size_t size);
+extern void *malloc (size_t size) ATTRIBUTE_MALLOC_SIZE ((1));
/* Re-allocate the previously allocated block
in ptr, making the new block SIZE bytes long. */
-extern void *realloc (void *ptr, size_t size);
+extern void *realloc (void *ptr, size_t size) ATTRIBUTE_ALLOC_SIZE ((2));
/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */
-extern void *calloc (size_t nmemb, size_t size);
+extern void *calloc (size_t nmemb, size_t size) ATTRIBUTE_MALLOC_SIZE ((1,2));
/* Free a block allocated by `malloc', `realloc' or `calloc'. */
extern void free (void *ptr);
=== modified file 'src/gtkutil.h'
--- a/src/gtkutil.h 2014-01-13 01:40:35 +0000
+++ b/src/gtkutil.h 2014-05-22 16:40:35 +0000
@@ -74,7 +74,7 @@
} xg_menu_item_cb_data;
-extern struct _widget_value *malloc_widget_value (void);
+extern struct _widget_value *malloc_widget_value (void) ATTRIBUTE_MALLOC;
extern void free_widget_value (struct _widget_value *);
extern bool xg_uses_old_file_dialog (void) ATTRIBUTE_CONST;
=== modified file 'src/lisp.h'
--- a/src/lisp.h 2014-05-19 19:19:05 +0000
+++ b/src/lisp.h 2014-05-22 16:40:35 +0000
@@ -3755,9 +3755,9 @@
#ifdef REL_ALLOC
/* Defined in ralloc.c. */
-extern void *r_alloc (void **, size_t);
+extern void *r_alloc (void **, size_t) ATTRIBUTE_ALLOC_SIZE ((2));
extern void r_alloc_free (void **);
-extern void *r_re_alloc (void **, size_t);
+extern void *r_re_alloc (void **, size_t) ATTRIBUTE_ALLOC_SIZE ((2));
extern void r_alloc_reset_variable (void **, void **);
extern void r_alloc_inhibit_buffer_relocation (int);
#endif
@@ -4391,16 +4391,17 @@
/* True means ^G can quit instantly. */
extern bool immediate_quit;
-extern void *xmalloc (size_t);
-extern void *xzalloc (size_t);
-extern void *xrealloc (void *, size_t);
+extern void *xmalloc (size_t) ATTRIBUTE_MALLOC_SIZE ((1));
+extern void *xzalloc (size_t) ATTRIBUTE_MALLOC_SIZE ((1));
+extern void *xrealloc (void *, size_t) ATTRIBUTE_ALLOC_SIZE ((2));
extern void xfree (void *);
-extern void *xnmalloc (ptrdiff_t, ptrdiff_t);
-extern void *xnrealloc (void *, ptrdiff_t, ptrdiff_t);
+extern void *xnmalloc (ptrdiff_t, ptrdiff_t) ATTRIBUTE_MALLOC_SIZE ((1,2));
+extern void *xnrealloc (void *, ptrdiff_t, ptrdiff_t)
+ ATTRIBUTE_ALLOC_SIZE ((2,3));
extern void *xpalloc (void *, ptrdiff_t *, ptrdiff_t, ptrdiff_t, ptrdiff_t);
-extern char *xstrdup (const char *);
-extern char *xlispstrdup (Lisp_Object);
+extern char *xstrdup (const char *) ATTRIBUTE_MALLOC;
+extern char *xlispstrdup (Lisp_Object) ATTRIBUTE_MALLOC;
extern void dupstring (char **, char const *);
extern void xputenv (const char *);
@@ -4432,7 +4433,7 @@
enum MAX_ALLOCA { MAX_ALLOCA = 16 * 1024 };
-extern void *record_xmalloc (size_t);
+extern void *record_xmalloc (size_t) ATTRIBUTE_ALLOC_SIZE ((1));
#define USE_SAFE_ALLOCA \
ptrdiff_t sa_count = SPECPDL_INDEX (); bool sa_must_free = false
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r117139: Supply malloc and alloc_size attributes for extern allocators.,
Paul Eggert <=