From 27bb4de72bedaa5fdecae24069ea7db1cfd0b5d4 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 13 Jun 2017 18:19:30 -0700 Subject: [PATCH] Port cleanup attribute to Oracle Studio 12.5 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit * INSTALL (--with-modules): List cleanup attribute as prereq. * src/conf_post.h (__has_attribute_cleanup): Remove; no longer needed. * src/emacs-module.c (MODULE_SETJMP_1): Don’t attempt to verify (__has_attribute (cleanup)), as Oracle Studio 12.5 supports __has_attribute only inside preprocessor expressions. The C compiler should check the cleanup attribute in the next line anyway. (module_reset_handlerlist): Remove an unnecessary ‘const’ that causes Oracle Studio 12.5 to refuse to compile. --- INSTALL | 5 +++-- src/conf_post.h | 1 - src/emacs-module.c | 5 ++--- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/INSTALL b/INSTALL index a99f1078044..b569cf116c5 100644 --- a/INSTALL +++ b/INSTALL @@ -322,8 +322,9 @@ typical 32-bit host, Emacs integers have 62 bits instead of 30. Use --with-cairo to compile Emacs with Cairo drawing. -Use --with-modules to build Emacs with support for loading dynamic -modules. +Use --with-modules to build Emacs with support for dynamic modules. +This needs a C compiler that supports '__attribute__ ((cleanup (...)))', +as in GCC 3.4 and later. Use --enable-gcc-warnings to enable compile-time checks that warn about possibly-questionable C code. This is intended for developers diff --git a/src/conf_post.h b/src/conf_post.h index 5e1d8457deb..18b096e2cf6 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -61,7 +61,6 @@ typedef bool bool_bf; #ifndef __has_attribute # define __has_attribute(a) __has_attribute_##a # define __has_attribute_alloc_size GNUC_PREREQ (4, 3, 0) -# define __has_attribute_cleanup GNUC_PREREQ (3, 4, 0) # define __has_attribute_externally_visible GNUC_PREREQ (4, 1, 0) # define __has_attribute_no_address_safety_analysis false # define __has_attribute_no_sanitize_address GNUC_PREREQ (4, 8, 0) diff --git a/src/emacs-module.c b/src/emacs-module.c index 9be481a271e..de62329b3b8 100644 --- a/src/emacs-module.c +++ b/src/emacs-module.c @@ -127,7 +127,7 @@ static void module_non_local_exit_signal_1 (emacs_env *, static void module_non_local_exit_throw_1 (emacs_env *, Lisp_Object, Lisp_Object); static void module_out_of_memory (emacs_env *); -static void module_reset_handlerlist (struct handler *const *); +static void module_reset_handlerlist (struct handler **); /* We used to return NULL when emacs_value was a different type from Lisp_Object, but nowadays we just use Qnil instead. Although they @@ -191,7 +191,6 @@ static struct emacs_env_private global_env_private; module_out_of_memory (env); \ return retval; \ } \ - verify (__has_attribute (cleanup)); \ struct handler *c __attribute__ ((cleanup (module_reset_handlerlist))) \ = c0; \ if (sys_setjmp (c->jmp)) \ @@ -1144,7 +1143,7 @@ mark_modules (void) function to be called automatically. PHANDLERLIST points to a word containing the handler list, for sanity checking. */ static void -module_reset_handlerlist (struct handler *const *phandlerlist) +module_reset_handlerlist (struct handler **phandlerlist) { eassert (handlerlist == *phandlerlist); handlerlist = handlerlist->next; -- 2.39.2