diff options
Diffstat (limited to 'src/alloc.c')
-rw-r--r-- | src/alloc.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/alloc.c b/src/alloc.c index 948b87851a7..a69f5045713 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -1179,8 +1179,6 @@ emacs_blocked_free (ptr, ptr2) void *ptr; const void *ptr2; { - EMACS_INT bytes_used_now; - BLOCK_INPUT_ALLOC; #ifdef GC_MALLOC_CHECK @@ -1756,6 +1754,8 @@ init_strings () string_blocks = NULL; n_string_blocks = 0; string_free_list = NULL; + empty_unibyte_string = make_pure_string ("", 0, 0, 0); + empty_multibyte_string = make_pure_string ("", 0, 0, 1); } @@ -2479,6 +2479,9 @@ make_uninit_string (length) int length; { Lisp_Object val; + + if (!length) + return empty_unibyte_string; val = make_uninit_multibyte_string (length, length); STRING_SET_UNIBYTE (val); return val; @@ -2497,6 +2500,8 @@ make_uninit_multibyte_string (nchars, nbytes) if (nchars < 0) abort (); + if (!nbytes) + return empty_multibyte_string; s = allocate_string (); allocate_string_data (s, nchars, nbytes); @@ -4256,9 +4261,14 @@ mark_maybe_pointer (p) { struct mem_node *m; - /* Quickly rule out some values which can't point to Lisp data. We - assume that Lisp data is aligned on even addresses. */ - if ((EMACS_INT) p & 1) + /* Quickly rule out some values which can't point to Lisp data. */ + if ((EMACS_INT) p % +#ifdef USE_LSB_TAG + 8 /* USE_LSB_TAG needs Lisp data to be aligned on multiples of 8. */ +#else + 2 /* We assume that Lisp data is aligned on even addresses. */ +#endif + ) return; m = mem_find (p); |