aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp Stephani2017-06-04 19:12:23 +0200
committerPhilipp Stephani2017-06-04 19:50:50 +0200
commit9be8b2bf1d1679e7b60dd7d2dbfef2c68f046938 (patch)
tree1bdf7a125dd9d6838559f7379a10b9982d1d3788
parent366e25a6d1caa30d8d336ce556f90f9ee46ca531 (diff)
downloademacs-9be8b2bf1d1679e7b60dd7d2dbfef2c68f046938.tar.gz
emacs-9be8b2bf1d1679e7b60dd7d2dbfef2c68f046938.zip
Use ATTRIBUTE_MAY_ALIAS where alias violations are likely
In particular, alias violations are likely for the return values of dlsym(3), which get cast around arbitrarily. * src/emacs-module.c (Fmodule_load): Use ATTRIBUTE_MAY_ALIAS.
-rw-r--r--src/dynlib.h11
-rw-r--r--src/emacs-module.c2
2 files changed, 8 insertions, 5 deletions
diff --git a/src/dynlib.h b/src/dynlib.h
index 6246c6a6642..1d53b8e5b2f 100644
--- a/src/dynlib.h
+++ b/src/dynlib.h
@@ -24,11 +24,14 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
24 24
25typedef void *dynlib_handle_ptr; 25typedef void *dynlib_handle_ptr;
26dynlib_handle_ptr dynlib_open (const char *path); 26dynlib_handle_ptr dynlib_open (const char *path);
27void *dynlib_sym (dynlib_handle_ptr h, const char *sym);
28typedef struct dynlib_function_ptr_nonce *(*dynlib_function_ptr) (void);
29dynlib_function_ptr dynlib_func (dynlib_handle_ptr h, const char *sym);
30const char *dynlib_error (void);
31int dynlib_close (dynlib_handle_ptr h); 27int dynlib_close (dynlib_handle_ptr h);
28const char *dynlib_error (void);
29
30ATTRIBUTE_MAY_ALIAS void *dynlib_sym (dynlib_handle_ptr h, const char *sym);
31
32typedef struct dynlib_function_ptr_nonce *(ATTRIBUTE_MAY_ALIAS *dynlib_function_ptr) (void);
33dynlib_function_ptr dynlib_func (dynlib_handle_ptr h, const char *sym);
34
32/* Sets *FILE to the file name from which PTR was loaded, and *SYM to 35/* Sets *FILE to the file name from which PTR was loaded, and *SYM to
33 its symbol name. If the file or symbol name could not be 36 its symbol name. If the file or symbol name could not be
34 determined, set the corresponding argument to NULL. */ 37 determined, set the corresponding argument to NULL. */
diff --git a/src/emacs-module.c b/src/emacs-module.c
index 0fb126e61f5..c276edab37b 100644
--- a/src/emacs-module.c
+++ b/src/emacs-module.c
@@ -658,7 +658,7 @@ funcall_module (Lisp_Object function, ptrdiff_t nargs, Lisp_Object *arglist)
658 initialize_environment (&pub, &priv); 658 initialize_environment (&pub, &priv);
659 659
660 USE_SAFE_ALLOCA; 660 USE_SAFE_ALLOCA;
661 emacs_value *args; 661 ATTRIBUTE_MAY_ALIAS emacs_value *args;
662 if (plain_values) 662 if (plain_values)
663 args = (emacs_value *) arglist; 663 args = (emacs_value *) arglist;
664 else 664 else