]> git.eshelyaron.com Git - emacs.git/commitdiff
Use ATTRIBUTE_MAY_ALIAS where alias violations are likely
authorPhilipp Stephani <phst@google.com>
Sun, 4 Jun 2017 17:12:23 +0000 (19:12 +0200)
committerPhilipp Stephani <phst@google.com>
Sun, 4 Jun 2017 17:50:50 +0000 (19:50 +0200)
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.

src/dynlib.h
src/emacs-module.c

index 6246c6a664262e3c9afbd14d52ed350274b279df..1d53b8e5b2fa6694166e7b943d553a36f5a6f6a7 100644 (file)
@@ -24,11 +24,14 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 typedef void *dynlib_handle_ptr;
 dynlib_handle_ptr dynlib_open (const char *path);
-void *dynlib_sym (dynlib_handle_ptr h, const char *sym);
-typedef struct dynlib_function_ptr_nonce *(*dynlib_function_ptr) (void);
-dynlib_function_ptr dynlib_func (dynlib_handle_ptr h, const char *sym);
-const char *dynlib_error (void);
 int dynlib_close (dynlib_handle_ptr h);
+const char *dynlib_error (void);
+
+ATTRIBUTE_MAY_ALIAS void *dynlib_sym (dynlib_handle_ptr h, const char *sym);
+
+typedef struct dynlib_function_ptr_nonce *(ATTRIBUTE_MAY_ALIAS *dynlib_function_ptr) (void);
+dynlib_function_ptr dynlib_func (dynlib_handle_ptr h, const char *sym);
+
 /* Sets *FILE to the file name from which PTR was loaded, and *SYM to
    its symbol name.  If the file or symbol name could not be
    determined, set the corresponding argument to NULL.  */
index 0fb126e61f5f4d516255abf8df395b1dc9bd5a79..c276edab37b1d8233a3546a020a7d9361abca45e 100644 (file)
@@ -658,7 +658,7 @@ funcall_module (Lisp_Object function, ptrdiff_t nargs, Lisp_Object *arglist)
   initialize_environment (&pub, &priv);
 
   USE_SAFE_ALLOCA;
-  emacs_value *args;
+  ATTRIBUTE_MAY_ALIAS emacs_value *args;
   if (plain_values)
     args = (emacs_value *) arglist;
   else