]> git.eshelyaron.com Git - emacs.git/commitdiff
Port cleanup attribute to Oracle Studio 12.5
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 14 Jun 2017 01:19:30 +0000 (18:19 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 14 Jun 2017 01:20:07 +0000 (18:20 -0700)
* 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
src/conf_post.h
src/emacs-module.c

diff --git a/INSTALL b/INSTALL
index a99f107804414976abe8e319890222f1b63008e0..b569cf116c594bf1802276586c981a1eb82aa85c 100644 (file)
--- 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
index 5e1d8457deb8e0fc88b89b91f26bf1797c98507e..18b096e2cf62d55b33dfa55a57e39eecd1ec3a3b 100644 (file)
@@ -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)
index 9be481a271ea08af88d462d7f3582655a4c1e822..de62329b3b8b3795eb8523c47f632d4f2f481e19 100644 (file)
@@ -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;