mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-22 20:42:26 -08:00
Port Qnil==0 XUNTAG to clang
clang has undefined behavior if the program subtracts an integer from (char *) 0. Problem reported by YAMAMOTO Mitsuharu in: http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00132.html * lisp.h (lisp_h_XUNTAG) [USE_LSB_TAG]: (XUNTAG) [!USE_LSB_TAG]: Port to clang 3.5.0.
This commit is contained in:
parent
9f654763f2
commit
f6a27d26dc
2 changed files with 10 additions and 2 deletions
|
|
@ -1,5 +1,12 @@
|
|||
2015-01-08 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Port Qnil==0 XUNTAG to clang
|
||||
clang has undefined behavior if the program subtracts an integer
|
||||
from (char *) 0. Problem reported by YAMAMOTO Mitsuharu in:
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00132.html
|
||||
* lisp.h (lisp_h_XUNTAG) [USE_LSB_TAG]:
|
||||
(XUNTAG) [!USE_LSB_TAG]: Port to clang 3.5.0.
|
||||
|
||||
Port GFileMonitor * hack to Qnil==0 platforms
|
||||
Reported by Glenn Morris in: http://bugs.gnu.org/15880#112
|
||||
* gfilenotify.c (monitor_to_lisp, lisp_to_monitor): New functions.
|
||||
|
|
|
|||
|
|
@ -368,7 +368,7 @@ error !;
|
|||
# define lisp_h_XFASTINT(a) XINT (a)
|
||||
# define lisp_h_XINT(a) (XLI (a) >> INTTYPEBITS)
|
||||
# define lisp_h_XTYPE(a) ((enum Lisp_Type) (XLI (a) & ~VALMASK))
|
||||
# define lisp_h_XUNTAG(a, type) XUNTAGBASE (a, type, 0)
|
||||
# define lisp_h_XUNTAG(a, type) ((void *) (intptr_t) (XLI (a) - (type)))
|
||||
# define lisp_h_XUNTAGBASE(a, type, base) \
|
||||
((void *) ((char *) (base) - (type) + (intptr_t) XLI (a)))
|
||||
#endif
|
||||
|
|
@ -905,7 +905,8 @@ XUNTAGBASE (Lisp_Object a, int type, void *base)
|
|||
INLINE void *
|
||||
XUNTAG (Lisp_Object a, int type)
|
||||
{
|
||||
return XUNTAGBASE (a, type, 0);
|
||||
intptr_t i = USE_LSB_TAG ? XLI (a) - type : XLI (a) & VALMASK;
|
||||
return (void *) i;
|
||||
}
|
||||
|
||||
#endif /* ! USE_LSB_TAG */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue