]> git.eshelyaron.com Git - emacs.git/commitdiff
Merge from trunk.
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 19 Nov 2011 07:15:21 +0000 (23:15 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 19 Nov 2011 07:15:21 +0000 (23:15 -0800)
48 files changed:
1  2  3 
src/ChangeLog
src/alloc.c
src/buffer.c
src/bytecode.c
src/callproc.c
src/ccl.c
src/character.c
src/charset.c
src/charset.h
src/chartab.c
src/coding.c
src/coding.h
src/composite.c
src/composite.h
src/data.c
src/dired.c
src/dispextern.h
src/dispnew.c
src/doprnt.c
src/emacs.c
src/font.c
src/font.h
src/fontset.c
src/frame.c
src/frame.h
src/gtkutil.c
src/image.c
src/indent.c
src/insdel.c
src/intervals.c
src/intervals.h
src/keyboard.c
src/keymap.c
src/lisp.h
src/nsfns.m
src/process.c
src/sound.c
src/w32fns.c
src/w32menu.c
src/window.c
src/xdisp.c
src/xfaces.c
src/xfns.c
src/xfont.c
src/xmenu.c
src/xselect.c
src/xterm.c
src/xterm.h

diff --cc src/ChangeLog
index eb71bfc62ed6158160e2cc24ab1ea34ae98d91fc,1bb4a6a59935a33e20271525e87618010e611225,76986f60c16b953dccb8c70852c88ecce82def85..4cec277fb36497a57f3f933d90bb5f99581c8e4e
-  2011-11-02  Paul Eggert  <eggert@cs.ucla.edu>
+++2011-11-18  Paul Eggert  <eggert@cs.ucla.edu>
 ++
 ++     Fix integer width and related bugs (Bug#9874).
 ++     * alloc.c (pure_bytes_used_lisp, pure_bytes_used_non_lisp):
 ++     (allocate_vectorlike, buffer_memory_full, struct sdata, SDATA_SIZE)
 ++     (string_bytes, check_sblock, allocate_string_data):
 ++     (compact_small_strings, Fmake_bool_vector, make_string)
 ++     (make_unibyte_string, make_multibyte_string)
 ++     (make_string_from_bytes, make_specified_string)
 ++     (allocate_vectorlike, Fmake_vector, find_string_data_in_pure)
 ++     (make_pure_string, make_pure_c_string, make_pure_vector, Fpurecopy)
 ++     (mark_vectorlike):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (allocate_pseudovector):
 ++     Use int, not EMACS_INT, where int is wide enough.
 ++     (inhibit_garbage_collection, Fgarbage_collect):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     * bidi.c (bidi_mirror_char): Use EMACS_INT, not int, where
 ++     int might not be wide enough.
 ++     (bidi_cache_search, bidi_cache_find, bidi_init_it)
 ++     (bidi_count_bytes, bidi_char_at_pos, bidi_fetch_char)
 ++     (bidi_at_paragraph_end, bidi_find_paragraph_start)
 ++     (bidi_paragraph_init, bidi_resolve_explicit, bidi_resolve_weak)
 ++     (bidi_level_of_next_char, bidi_move_to_visually_next):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     * buffer.c (copy_overlays, Fgenerate_new_buffer_name)
 ++     (Fkill_buffer, Fset_buffer_major_mode)
 ++     (advance_to_char_boundary, Fbuffer_swap_text)
 ++     (Fset_buffer_multibyte, overlays_at, overlays_in)
 ++     (overlay_touches_p, struct sortvec, record_overlay_string)
 ++     (overlay_strings, recenter_overlay_lists)
 ++     (adjust_overlays_for_insert, adjust_overlays_for_delete)
 ++     (fix_start_end_in_overlays, fix_overlays_before, modify_overlay)
 ++     (Fmove_overlay, Fnext_overlay_change, Fprevious_overlay_change)
 ++     (Foverlay_recenter, last_overlay_modification_hooks_used)
 ++     (report_overlay_modification, evaporate_overlays, enlarge_buffer_text):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (validate_region): Omit unnecessary test for b <= e,
 ++     since that's guaranteed by the previous test.
 ++     (adjust_overlays_for_delete): Avoid pos + length overflow.
 ++     (Fmove_overlay, Fdelete_overlay, add_overlay_mod_hooklist)
 ++     (report_overlay_modification):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (Foverlays_at, Fnext_overlay_change, Fprevious_overlay_change):
 ++     Omit pointer cast, which isn't needed anyway, and doesn't work
 ++     after the EMACS_INT -> ptrdiff_t change.
 ++     (Fmove_overlay): Delete an evaporating overlay
 ++     if it becomes empty after its bounds are adjusted to fit within
 ++     its buffer.  Without this fix, in a nonempty buffer (let ((o
 ++     (make-overlay 1 2))) (overlay-put o 'evaporate t) (move-overlay o 0 1))
 ++     yields an empty overlay that has the evaporate property, which is
 ++     not supposed to happen.  (Bug#9642)
 ++     * buffer.h: Adjust decls to match defn changes elsewhere.
 ++     (struct buffer_text, struct buffer):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     Use EMACS_INT, not int, where int might not be wide enough.
 ++     * bytecode.c (unmark_byte_stack, exec_byte_code): Use ptrdiff_t,
 ++     not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (exec_byte_code): Use tighter memory-full test, one that checks
 ++     for alloca overflow.  Don't compute the address of the object just
 ++     before an array, as that's not portable.  Use EMACS_INT, not
 ++     ptrdiff_t or int, where ptrdiff_t or int might not be wide enough.
 ++     * callint.c (Fcall_interactively):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     * callproc.c (call_process_kill, Fcall_process):
 ++     Don't assume pid_t fits into an Emacs fixnum.
 ++     (call_process_cleanup, Fcall_process, child_setup):
 ++     Don't assume pid_t fits into int.
 ++     (call_process_cleanup, Fcall_process, delete_temp_file)
 ++     (Fcall_process_region):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (Fcall_process): Simplify handling of volatile integers.
 ++     Use int, not EMACS_INT, where int will do.
 ++     * casefiddle.c (casify_object, casify_region, operate_on_word)
 ++     (Fupcase_word, Fdowncase_word, Fcapitalize_word):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (casify_object): Avoid integer overflow when overallocating buffer.
 ++     * casetab.c (set_identity, shuffle): Prefer int to unsigned when
 ++     either works.  Use lint_assume to convince GCC 4.6.1 that it's OK.
 ++     * category.c (Fchar_category_set): Don't assume fixnum fits in int.
 ++     * category.h (CATEGORYP): Don't assume arg is nonnegative.
 ++     * ccl.c (GET_CCL_INT): Remove; no longer needed, since the
 ++     integers are now checked earlier.  All uses replaced with XINT.
 ++     (ccl_driver):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     For CCL_MapSingle, check that content and value are in int range.
 ++     (ccl_driver, Fregister_code_conversion_map):
 ++     Check that Vcode_version_map_vector is a vector.
 ++     (resolve_symbol_ccl_program): Check that vector header is in range.
 ++     Always copy the vector, so that we can check its contents reliably
 ++     now rather than having to recheck each instruction as it's being
 ++     executed.  Check that vector words fit in 'int'.
 ++     (ccl_get_compiled_code, Fregister_ccl_program)
 ++     (Fregister_code_conversion_map): Use ptrdiff_t, not int, for
 ++     program indexes, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (Fccl_execute, Fccl_execute_on_string): Check that initial reg
 ++     contents are in range.
 ++     (Fccl_execute_on_string): Check that status is in range.
 ++     * ccl.h (struct ccl_program.idx): Now ptrdiff_t, not int.
 ++     * character.c (char_resolve_modifier_mask, Fchar_resolve_modifiers):
 ++     Accept and return EMACS_INT, not int, because callers can pass values
 ++     out of 'int' range.
 ++     (c_string_width, strwidth, lisp_string_width, chars_in_text)
 ++     (multibyte_chars_in_text, parse_str_as_multibyte)
 ++     (str_as_multibyte, count_size_as_multibyte, str_to_multibyte)
 ++     (str_as_unibyte, str_to_unibyte, string_count_byte8)
 ++     (string_escape_byte8, Fget_byte):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (Funibyte_string): Use CHECK_RANGED_INTEGER, not CHECK_NATNUM, to
 ++     avoid mishandling large integers.
 ++     * character.h: Adjust decls to match defn changes elsewhere.
 ++     * charset.c (load_charset_map_from_file, find_charsets_in_text)
 ++     (Ffind_charset_region):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (load_charset_map_from_file): Redo idx calculation to avoid overflow.
 ++     (load_charset_map_from_vector, Fdefine_charset_internal):
 ++     Don't assume fixnum fits in int.
 ++     (load_charset_map_from_vector, Fmap_charset_chars):
 ++     Remove now-unnecessary CHECK_NATNUMs.
 ++     (Fdefine_charset_internal): Check ranges here, more carefully.
 ++     Don't rely on undefined behavior with signed left shift overflow.
 ++     Don't assume unsigned int fits into fixnum, or that fixnum fits
 ++     into unsigned int.  Don't require max_code to be a valid fixnum;
 ++     that's not true for gb10830 4-byte on a 32-bit host.  Allow
 ++     invalid_code to be a cons, for the same reason.  Require code_offset
 ++     to be a character.  Avoid int overflow if max_char is close
 ++     to INT_MAX.
 ++     (CODE_POINT_TO_INDEX): On 32-bit hosts, return int, not unsigned;
 ++     this is intended anyway and avoids some undefined behavior.
 ++     (load_charset_map): Pass unsigned, not int, as 2nd arg of
 ++     INDEX_TO_CODE_POINT, as that's what it expects.
 ++     (Funify_charset, encode_char): Don't stuff unsigned vals into int vars.
 ++     * charset.h (DECODE_CHAR): Return int, not unsigned;
 ++     this is what was intended anyway, and it avoids undefined behavior.
 ++     (CHARSET_OFFSET): Remove unused macro, instead of fixing its
 ++     integer-overflow issues.
 ++     (ENCODE_CHAR): Return unsigned on all hosts, not just on 32-bit hosts.
 ++     Formerly, it returned EMACS_INT on 64-bit hosts in the common case
 ++     where the argument is EMACS_INT, and this behavior is not intended.
 ++     * chartab.c (Fmake_char_table, Fset_char_table_range)
 ++     (uniprop_get_decoder, uniprop_get_encoder):
 ++     Don't assume fixnum fits in int.
 ++     * cmds.c (move_point): New function, that does the gist of
 ++     Fforward_char and Fbackward_char, but does so while checking
 ++     for integer overflow more accurately.
 ++     (Fforward_char, Fbackward_char): Use it.
 ++     (Fforward_line, Fend_of_line, internal_self_insert)
 ++     (internal_self_insert):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     Fix a FIXME, by checking for integer overflow when calculating
 ++     target_clm and actual_clm.
 ++     * coding.c (detect_coding_XXX, encode_coding_XXX, CODING_DECODE_CHAR)
 ++     (ASSURE_DESTINATION, coding_alloc_by_realloc)
 ++     (coding_alloc_by_making_gap, alloc_destination)
 ++     (detect_coding_utf_8, encode_coding_utf_8, decode_coding_utf_16)
 ++     (encode_coding_utf_16, detect_coding_emacs_mule)
 ++     (decode_coding_emacs_mule, encode_coding_emacs_mule)
 ++     (detect_coding_iso_2022, decode_coding_iso_2022)
 ++     (encode_invocation_designation, encode_designation_at_bol)
 ++     (encode_coding_iso_2022, detect_coding_sjis, detect_coding_big5)
 ++     (decode_coding_sjis, decode_coding_big5, encode_coding_sjis)
 ++     (encode_coding_big5, detect_coding_ccl, decode_coding_ccl)
 ++     (encode_coding_ccl, encode_coding_raw_text)
 ++     (detect_coding_charset, decode_coding_charset)
 ++     (encode_coding_charset, detect_eol, decode_eol, produce_chars)
 ++     (produce_composition, produce_charset, produce_annotation)
 ++     (decode_coding, handle_composition_annotation)
 ++     (handle_charset_annotation, consume_chars, decode_coding_gap)
 ++     (decode_coding_object, encode_coding_object, detect_coding_system)
 ++     (Ffind_coding_systems_region_internal, Fcheck_coding_systems_region)
 ++     (code_convert_region, code_convert_string)
 ++     (Fdefine_coding_system_internal):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (setup_iso_safe_charsets, consume_chars, Funencodable_char_position)
 ++     (Fdefine_coding_system_internal):
 ++     Don't assume fixnums fit in int.
 ++     (decode_coding_gap, decode_coding_object, encode_coding_object)
 ++     (Fread_coding_system, Fdetect_coding_region)
 ++     (Funencodable_char_position, Fcheck_coding_systems_region)
 ++     (get_translation, handle_composition_annotation, consume_chars):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (consume_chars): Rewrite to not calculate an address outside buffer.
 ++     (Ffind_operation_coding_system): NATNUMP can eval its arg twice.
 ++     Don't access memory outside of the args array.
 ++     (Fdefine_coding_system_internal): Check for charset-id overflow.
 ++     (ENCODE_ISO_CHARACTER): Use unsigned, not int, to store the unsigned
 ++     result of ENCODE_CHAR.
 ++     * coding.h: Adjust decls to match defn changes elsewhere.
 ++     (struct coding_system):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     * composite.c (get_composition_id, find_composition)
 ++     (run_composition_function, update_compositions)
 ++     (compose_text, composition_gstring_put_cache)
 ++     (composition_gstring_p, composition_gstring_width)
 ++     (fill_gstring_header, fill_gstring_body, autocmp_chars)
 ++     (composition_compute_stop_pos, composition_reseat_it)
 ++     (composition_update_it, struct position_record)
 ++     (find_automatic_composition, composition_adjust_point)
 ++     (Fcomposition_get_gstring, Ffind_composition_internal):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (update_compositions):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     * composite.h: Adjust decls to match defn changes elsewhere.
 ++     (struct composition):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     * data.c (let_shadows_buffer_binding_p, let_shadows_global_binding_p):
 ++     Do not attempt to compute the address of the object just before a
 ++     buffer; this is not portable.
 ++     (Faref, Faset):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (Faset): Use int, not EMACS_INT, where int is wide enough.
 ++     (Fstring_to_number): Don't assume fixnums fit in int.
 ++     (Frem): Don't assume arg is nonnegative.
 ++     * dbusbind.c (xd_append_arg): Check for integers out of range.
 ++     (Fdbus_call_method): Don't overflow the timeout int.
 ++     * dired.c (directory_files_internal, file_name_completion, scmp)
 ++     (file_name_completion_stat):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (file_name_completion): Don't overflow matchcount.
 ++     (file_name_completion_stat): Use SAFE_ALLOCA, not alloca.
 ++     * dispextern.h: Adjust decls to match defn changes elsewhere.
 ++     (struct text_pos, struct glyph, struct bidi_saved_info)
 ++     (struct bidi_string_data, struct bidi_it, struct composition_it)
 ++     (struct it):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (struct display_pos, struct composition_it, struct it):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     * dispnew.c (increment_matrix_positions)
 ++     (increment_row_positions, mode_line_string)
 ++     (marginal_area_string):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (change_frame_size_1, Fredisplay, Fframe_or_buffer_changed_p):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (duration_to_sec_usec): New function, to check for overflow better.
 ++     (Fsleep_for, sit_for): Use it.
 ++     * doc.c (get_doc_string, store_function_docstring):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (get_doc_string, Fsnarf_documentation):
 ++     Use int, not EMACS_INT, where int is wide enough.
 ++     (get_doc_string):
 ++     Use SAFE_ALLOCA, not alloca.
 ++     Check for overflow when converting EMACS_INT to off_t.
 ++     * doprnt.c (doprnt):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     * editfns.c (init_editfns, Fuser_uid, Fuser_real_uid):
 ++     Don't assume uid_t fits into fixnum.
 ++     (buildmark, Fgoto_char, overlays_around, find_field, Fdelete_field)
 ++     (Ffield_string, Ffield_string_no_properties, Ffield_beginning)
 ++     (Ffield_end, Fconstrain_to_field, Fline_beginning_position)
 ++     (Fline_end_position, Fprevious_char, Fchar_after, Fchar_before)
 ++     (general_insert_function)
 ++     (Finsert_char, make_buffer_string, make_buffer_string_both)
 ++     (update_buffer_properties, Fbuffer_substring)
 ++     (Fbuffer_substring_no_properties, Fcompare_buffer_substrings)
 ++     (Fsubst_char_in_region, check_translation)
 ++     (Ftranslate_region_internal, save_restriction_restore, Fformat)
 ++     (transpose_markers, Ftranspose_regions):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (clip_to_bounds): Move to lisp.h as an inline function).
 ++     (Fconstrain_to_field): Don't assume integers are nonnegative.
 ++     (Fline_beginning_position, Fsave_excursion, Fsave_current_buffer):
 ++     (Fsubst_char_in_region, Fsave_restriction):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (Femacs_pid): Don't assume pid_t fits into fixnum.
 ++     (lo_time): Use int, not EMACS_INT, when int suffices.
 ++     (lisp_time_argument): Check for usec out of range.
 ++     (Fencode_time): Don't assume fixnum fits in int.
 ++     (Fuser_login_name, Fuser_full_name): Signal an error
 ++     if a uid argument is out of range, rather than relying on
 ++     undefined behavior.
 ++     (Fformat_time_string): Remove now-unnecessary check.
 ++     lisp_time_argument checks for out-of-range usec now.
 ++     * emacs.c (gdb_valbits, gdb_gctypebits): Now int, not EMACS_INT.
 ++     (gdb_data_seg_bits): Now uintptr_t, not EMACS_INT.
 ++     (PVEC_FLAG, gdb_array_mark_flag): Now ptrdiff_t, not EMACS_INT.
 ++     (init_cmdargs, Fdump_emacs):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (Fkill_emacs): Don't assume fixnum fits in int; instead, take just
 ++     the bottom (typically) 32 bits of the fixnum.
 ++     * eval.c (specpdl_size, call_debugger):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (when_entered_debugger, Fbacktrace_debug):
 ++     Don't assume fixnum can fit in int.
 ++     (Fdefvaralias, Fdefvar): Do not attempt to compute the address of
 ++     the object just before a buffer; this is not portable.
 ++     (FletX, Flet, Funwind_protect, do_autoload, Feval, funcall_lambda)
 ++     (grow_specpdl, unbind_to):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (Fapply, apply_lambda): Don't assume ptrdiff_t can hold fixnum.
 ++     (grow_specpdl): Simplify allocation by using xpalloc.
 ++     (Fprog1, Fprog2): Don't assume list length fits in int.  Simplify.
 ++     * fileio.c (Ffind_file_name_handler, Fcopy_file, Frename_file)
 ++     (Finsert_file_contents, Fwrite_region, Fdo_auto_save):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (Ffind_file_name_handler, non_regular_inserted, Finsert_file_contents)
 ++     (a_write, e_write):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (Fcopy_file, non_regular_nbytes, read_non_regular)
 ++     (Finsert_file_contents):
 ++     Use int, not EMACS_INT, where int is wide enough.
 ++     (READ_BUF_SIZE): Verify that it fits in int.
 ++     (Finsert_file_contents): Check that counts are in proper range,
 ++     rather than assuming fixnums fit into ptrdiff_t etc.
 ++     Don't assume fixnums fit into int.
 ++     * floatfns.c (Fexpt): Avoid undefined signed * signed overflow.
 ++     * fns.c (Fcompare_strings, Fstring_lessp, struct textprop_rec, concat)
 ++     (string_char_byte_cache_charpos, string_char_byte_cache_bytepos)
 ++     (string_char_to_byte, string_byte_to_char)
 ++     (string_make_multibyte, string_to_multibyte)
 ++     (string_make_unibyte, Fstring_as_unibyte, Fstring_as_multibyte)
 ++     (Fstring_to_unibyte, Fsubstring, Fsubstring_no_properties)
 ++     (substring_both, Fdelete, internal_equal, Ffillarray)
 ++     (Fclear_string, mapcar1)
 ++     (Fbase64_encode_region, Fbase64_encode_string, base64_encode_1)
 ++     (Fbase64_decode_region, Fbase64_decode_string, base64_decode_1)
 ++     (larger_vector, make_hash_table, maybe_resize_hash_table)
 ++     (hash_lookup, hash_remove_from_table, hash_clear, sweep_weak_table)
 ++     (Fmaphash, secure_hash):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (concat): Check for string index and length overflow.
 ++     (Fmapconcat): Don't assume fixnums fit into ptrdiff_t.
 ++     (Frequire):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (larger_vector): New API (vec, incr_min, size_max) replaces old
 ++     one (vec, new_size, init).  This catches size overflow.
 ++     INIT was removed because it was always Qnil.
 ++     All callers changed.
 ++     (INDEX_SIZE_BOUND): New macro, which calculates more precisely
 ++     the upper bound on a hash table index size.
 ++     (make_hash_table, maybe_resize_hash_table): Use it.
 ++     (secure_hash): Computer start_byte and end_byte only after
 ++     they're known to be in ptrdiff_t range.
 ++     * font.c (font_intern_prop, font_at, font_range, Ffont_shape_gstring)
 ++     (Ffont_get_glyphs, Ffont_at):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (font_style_to_value, font_prop_validate_style, font_expand_wildcards)
 ++     (Flist_fonts, Fopen_font):
 ++     Don't assume fixnum can fit in int.
 ++     (check_gstring): Don't assume index can fit in int.
 ++     (font_match_p): Check that fixnum is a character, not a nonnegative
 ++     fixnum, since the later code needs to stuff it into an int.
 ++     (font_find_for_lface): Use SAFE_ALLOCA_LISP, not alloca.
 ++     (font_fill_lglyph_metrics): Use unsigned, not EMACS_INT, to avoid
 ++     conversion overflow issues.
 ++     (Fopen_font): Check for integer out of  range.
 ++     (Ffont_get_glyphs): Don't assume index can fit in int.
 ++     * font.h: Adjust decls to match defn changes elsewhere.
 ++     * fontset.c (reorder_font_vector): Redo score calculation to avoid
 ++     integer overflow.
 ++     (num_auto_fontsets, fontset_from_font): Use ptrdiff_t, not
 ++     printmax_t, where ptrdiff_t is wide enough.
 ++     (Finternal_char_font):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     * frame.c (Fset_mouse_position, Fset_mouse_pixel_position)
 ++     (Fset_frame_height, Fset_frame_width, Fset_frame_size)
 ++     (Fset_frame_position, x_set_frame_parameters)
 ++     (x_set_line_spacing, x_set_border_width)
 ++     (x_set_internal_border_width, x_set_alpha, x_figure_window_size):
 ++     Check that fixnums are in proper range for system types.
 ++     (frame_name_fnn_p, Fframe_parameter, Fmodify_frame_parameters):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (Fmodify_frame_parameters): Don't assume fixnum fits in int.
 ++     Use SAFE_ALLOCA_LISP, not alloca.
 ++     * frame.h (struct frame): Use intptr_t, not EMACS_INT, where
 ++     intptr_t is wide enough.
 ++     * fringe.c (lookup_fringe_bitmap, get_logical_fringe_bitmap)
 ++     (Fdefine_fringe_bitmap): Don't assume fixnum fits in int.
 ++     (Ffringe_bitmaps_at_pos): Don't assume index fits in int.
 ++     Check for fixnum out of range.
 ++     * ftfont.c (ftfont_list): Don't assume index fits in int.
 ++     Check that fixnums are in proper range for system types.
 ++     (ftfont_shape_by_flt):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     * gnutls.c (emacs_gnutls_write, emacs_gnutls_read):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (Fgnutls_error_fatalp, Fgnutls_error_string, Fgnutls_boot):
 ++     Check that fixnums are in proper range for system types.
 ++     * gnutls.h: Adjust decls to match defn changes elsewhere.
 ++     * gtkutil.c (xg_dialog_run):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (update_frame_tool_bar):
 ++     Check that fixnums are in proper range for system types.
 ++     * image.c (parse_image_spec): Redo count calculation to avoid overflow.
 ++     (lookup_image): Check that fixnums are in range for system types.
 ++     * indent.c (last_known_column, last_known_column_point):
 ++     (current_column_bol_cache):
 ++     (skip_invisible, current_column, check_display_width):
 ++     (check_display_width, scan_for_column, current_column_1)
 ++     (Findent_to, Fcurrent_indentation, position_indentation)
 ++     (indented_beyond_p, Fmove_to_column, compute_motion):
 ++     (Fcompute_motion, Fvertical_motion):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (last_known_column_modified): Use EMACS_INT, not int.
 ++     (check_display_width):
 ++     (Fcompute_motion):
 ++     Check that fixnums and floats are in proper range for system types.
 ++     (compute_motion): Don't assume index or fixnum fits in int.
 ++     (compute_motion, Fcompute_motion):
 ++     Use int, not EMACS_INT, when it is wide enough.
 ++     (vmotion): Omit local var start_hpos that is always 0; that way
 ++     we don't need to worry about overflow in expressions involving it.
 ++     * indent.h: Adjust decls to match defn changes elsewhere.
 ++     (struct position):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     Use int, not EMACS_INT, where int is wide enough.
 ++     Remove unused members ovstring_chars_done and tab_offset;
 ++     all uses removed.
 ++     * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
 ++     (adjust_markers_for_delete, adjust_markers_for_insert, adjust_point)
 ++     (adjust_markers_for_replace, make_gap_larger, make_gap_smaller)
 ++     (make_gap, copy_text, insert, insert_and_inherit)
 ++     (insert_before_markers, insert_before_markers_and_inherit)
 ++     (insert_1, count_combining_before, count_combining_after)
 ++     (insert_1_both, insert_from_string)
 ++     (insert_from_string_before_markers, insert_from_string_1)
 ++     (insert_from_gap, insert_from_buffer, insert_from_buffer_1)
 ++     (adjust_after_replace, adjust_after_insert, replace_range)
 ++     (replace_range_2, del_range, del_range_1, del_range_byte)
 ++     (del_range_both, del_range_2, modify_region)
 ++     (prepare_to_modify_buffer, signal_before_change)
 ++     (signal_after_change, Fcombine_after_change_execute):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     * intervals.c (traverse_intervals, rotate_right, rotate_left)
 ++     (balance_an_interval, split_interval_right, split_interval_left)
 ++     (find_interval, next_interval, update_interval)
 ++     (adjust_intervals_for_insertion, delete_node, delete_interval)
 ++     (interval_deletion_adjustment, adjust_intervals_for_deletion)
 ++     (static_offset_intervals, offset_intervals)
 ++     (merge_interval_right, merge_interval_left, make_new_interval)
 ++     (graft_intervals_into_buffer, temp_set_point_both)
 ++     (temp_set_point, set_point, adjust_for_invis_intang)
 ++     (set_point_both, move_if_not_intangible, get_property_and_range)
 ++     (get_local_map, copy_intervals, copy_intervals_to_string)
 ++     (compare_string_intervals, set_intervals_multibyte_1):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     * intervals.h: Adjust decls to match defn changes elsewhere.
 ++     (struct interval):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     * keyboard.c (this_command_key_count, this_single_command_key_start)
 ++     (before_command_key_count, before_command_echo_length, echo_now)
 ++     (echo_length, recursive_edit_1, Frecursive_edit, Ftrack_mouse)
 ++     (command_loop_1, safe_run_hooks, read_char, timer_check_2)
 ++     (menu_item_eval_property, read_key_sequence, Fread_key_sequence)
 ++     (Fread_key_sequence_vector, Fexecute_extended_command, Fsuspend_emacs):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (last_non_minibuf_size, last_point_position, echo_truncate)
 ++     (command_loop_1, adjust_point_for_property, read_char, gen_help_event)
 ++     (make_lispy_position, make_lispy_event, parse_modifiers_uncached)
 ++     (parse_modifiers, modify_event_symbol, Fexecute_extended_command)
 ++     (stuff_buffered_input):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (last_auto_save, command_loop_1, read_char):
 ++     Use EMACS_INT, not int, to avoid integer overflow.
 ++     (record_char): Avoid overflow in total_keys computation.
 ++     (parse_modifiers_uncached): Redo index calculation to avoid overflow.
 ++     * keyboard.h: Adjust decls to match defn changes elsewhere.
 ++     * keymap.c (Fdefine_key, Fcurrent_active_maps, accessible_keymaps_1)
 ++     (Fkey_description, Fdescribe_vector, Flookup_key):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (click_position): New function, to check that positions are in range.
 ++     (Fcurrent_active_maps):
 ++     (describe_command):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (Faccessible_keymaps, Fkey_description):
 ++     (preferred_sequence_p):
 ++     Don't assume fixnum can fit into int.
 ++     (Fkey_description): Use SAFE_ALLOCA_LISP, not alloca.
 ++     Check for integer overflow in size calculations.
 ++     (Ftext_char_description): Use CHECK_CHARACTER, not CHECK_NUMBER, to
 ++     avoid mishandling large integers.
 ++     * lisp.h: Adjust decls to match defn changes elsewhere.
 ++     (ARRAY_MARK_FLAG, PSEUDOVECTOR_FLAG, struct Lisp_String)
 ++     (struct vectorlike_header, struct Lisp_Subr, struct Lisp_Hash_Table)
 ++     (struct Lisp_Marker):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (clip_to_bounds): Now an inline function, moved here from editfns.c.
 ++     (GLYPH_CODE_P): Check for overflow in system types, subsuming the
 ++     need for GLYPH_CODE_CHAR_VALID_P and doing proper checking ourselves.
 ++     All callers changed.
 ++     (GLYPH_CODE_CHAR, GLYPH_CODE_FACE):
 ++     Assume the arg has valid form, since it always does.
 ++     (TYPE_RANGED_INTEGERP): Avoid bug when checking against a wide
 ++     unsigned integer system type.
 ++     (CHECK_RANGED_INTEGER, CHECK_TYPE_RANGED_INTEGER): New macros.
 ++     (struct catchtag, specpdl_size, SPECPDL_INDEX, USE_SAFE_ALLOCA):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (struct catchtag): Use EMACS_INT, not int, since it may be a fixnum.
 ++     (duration_to_sec_usec): New decl.
 ++     * lread.c (read_from_string_index, read_from_string_index_byte)
 ++     (read_from_string_limit, readchar, unreadchar, openp)
 ++     (read_internal_start, read1, oblookup):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (Fload, readevalloop, Feval_buffer, Feval_region):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (openp): Check for out-of-range argument to 'access'.
 ++     (read1): Use int, not EMACS_INT, where int is wide enough.
 ++     Don't assume fixnum fits into int.
 ++     Fix off-by-one error that can read outside a buffer.
 ++     (read_filtered_event): Use duration_to_sec_usec
 ++     to do proper overflow checking on durations.
 ++     * macros.c (Fstart_kbd_macro): Use xpalloc to check for overflow
 ++     in size calculation.
 ++     (Fexecute_kbd_macro):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     * marker.c (cached_charpos, cached_bytepos, CONSIDER)
 ++     (byte_char_debug_check, buf_charpos_to_bytepos, verify_bytepos)
 ++     (buf_bytepos_to_charpos, Fset_marker, set_marker_restricted)
 ++     (set_marker_both, set_marker_restricted_both, marker_position)
 ++     (marker_byte_position, Fbuffer_has_markers_at):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (Fset_marker, set_marker_restricted): Don't assume fixnum fits in int.
 ++     * menu.c (ensure_menu_items): Renamed from grow_menu_items.
 ++     It now merely ensures that the menu is large enough, without
 ++     necessarily growing it, as this avoids some integer overflow issues.
 ++     All callers changed.
 ++     (keymap_panes, parse_single_submenu, Fx_popup_menu):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (parse_single_submenu, Fx_popup_menu): Don't assume fixnum fits in int.
 ++     Use SAFE_ALLOCA_LISP, not alloca.
 ++     (find_and_return_menu_selection): Avoid unnecessary casts of pointers
 ++     to EMACS_INT.  Check that fixnums are in proper range for system types.
 ++     * minibuf.c (minibuf_prompt_width, string_to_object)
 ++     (Fminibuffer_contents, Fminibuffer_contents_no_properties)
 ++     (Fminibuffer_completion_contents, Ftry_completion, Fall_completions):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (get_minibuffer, read_minibuf_unwind):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (read_minibuf): Omit unnecessary arg BACKUP_N, which is always nil;
 ++     this simplifies overflow checking.  All callers changed.
 ++     (read_minibuf, Fread_buffer, Ftry_completion, Fall_completions)
 ++     (Ftest_completion):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     * nsfns.m (check_ns_display_info): Don't assume fixnum fits in long.
 ++     (x_set_menu_bar_lines, x_set_tool_bar_lines, Fx_create_frame):
 ++     Check that fixnums are in proper range for system types.
 ++     (Fx_create_frame, Fx_show_tip):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     * nsfont.m (ns_findfonts, nsfont_list_family):
 ++     Don't assume fixnum fits in long.
 ++     * nsmenu.m (ns_update_menubar, ns_menu_show, ns_popup_dialog):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (ns_update_menubar): Use intptr_t, not EMACS_INT, when intptr_t is
 ++     wide enough.
 ++     * nsselect.m (ns_get_local_selection, clean_local_selection_data):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     * print.c (print_buffer_size, print_buffer_pos, print_buffer_pos_byte)
 ++     (PRINTDECLARE, PRINTPREPARE):
 ++     (strout, print_string):
 ++     (print, print_preprocess, print_check_string_charset_prop)
 ++     (print_object):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (PRINTDECLARE):
 ++     (temp_output_buffer_setup, Fprin1_to_string, print_object):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (PRINTPREPARE): Use int, not ptrdiff_t, where int is wide enough.
 ++     (printchar, strout): Use xpalloc to catch size calculation overflow.
 ++     (Fexternal_debugging_output): Don't overflow EMACS_INT->int conversion.
 ++     (print_error_message): Use SAFE_ALLOCA, not alloca.
 ++     (print_object): Use int, not EMACS_INT, where int is wide enough.
 ++     * process.c (Fdelete_process): Don't assume pid fits into EMACS_INT.
 ++     (Fset_process_window_size, Fformat_network_address)
 ++     (get_lisp_to_sockaddr_size, set_socket_option, Fmake_network_process)
 ++     (sigchld_handler):
 ++     Check that fixnums are in proper range for system types.
 ++     (Fsignal_process): Simplify by avoiding a goto.
 ++     Check for process-ids out of pid_t range rather than relying on
 ++     undefined behavior.
 ++     (Fformat_network_address, read_process_output, send_process)
 ++     (Fprocess_send_region, status_notify):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (Fformat_network_address, Fmake_serial_process, Fmake_network_process)
 ++     (wait_reading_process_output, read_process_output, exec_sentinel):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (conv_lisp_to_sockaddr): Don't assume fixnums fit into int.
 ++     (Faccept_process_output): Use duration_to_sec_usec to do proper
 ++     overflow checking on durations.
 ++     (emacs_get_tty_pgrp, Fprocess_running_child_p, process_send_signal):
 ++     Don't assume pid_t fits in int.
 ++     * puresize.h (PURESIZE_RATIO): Shrink this to 8/6 on 32-bit hosts
 ++     configured --with-wide-int.
 ++     * scroll.c (calculate_scrolling, calculate_direct_scrolling)
 ++     (line_ins_del): Use int, not EMACS_INT, where int is wide enough.
 ++     * search.c (looking_at_1, string_match_1):
 ++     (fast_string_match, fast_c_string_match_ignore_case)
 ++     (fast_string_match_ignore_case, fast_looking_at, scan_buffer)
 ++     (scan_newline, find_before_next_newline, search_command)
 ++     (trivial_regexp_p, search_buffer, simple_search, boyer_moore)
 ++     (set_search_regs, wordify):
 ++     (Freplace_match):
 ++     (Fmatch_data):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (string_match_1, search_buffer, set_search_regs):
 ++     (Fmatch_data):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (wordify): Check for overflow in size calculation.
 ++     (Freplace_match): Avoid potential buffer overflow in search_regs.start.
 ++     (Fset_match_data): Don't assume fixnum fits in ptrdiff_t.
 ++     Check that fixnums are in proper range for system types.
 ++     * sound.c (struct sound_device)
 ++     (wav_play, au_play, vox_write, alsa_period_size, alsa_write):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (Fplay_sound_internal):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     * syntax.c (struct lisp_parse_state, find_start_modiff)
 ++     (Finternal_describe_syntax_value, scan_lists, scan_sexps_forward):
 ++     (Fparse_partial_sexp):
 ++     Don't assume fixnums can fit in int.
 ++     (struct lisp_parse_state, find_start_pos, find_start_value)
 ++     (find_start_value_byte, find_start_begv)
 ++     (update_syntax_table, char_quoted, dec_bytepos)
 ++     (find_defun_start, prev_char_comend_first, back_comment):
 ++     (scan_words, skip_chars, skip_syntaxes, forw_comment, Fforward_comment)
 ++     (scan_lists, Fbackward_prefix_chars, scan_sexps_forward):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (Finternal_describe_syntax_value): Check that match_lisp is a
 ++     character, not an integer, since the code stuffs it into int.
 ++     (scan_words, scan_sexps_forward):
 ++     Check that fixnums are in proper range for system types.
 ++     (Fforward_word):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (scan_sexps_forward):
 ++     Use CHARACTERP, not INTEGERP, since the value must fit into int.
 ++     (Fparse_partial_sexp): Fix doc; element 8 is not ignored.
 ++     * syntax.h: Adjust decls to match defn changes elsewhere.
 ++     (struct gl_state_s):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     * sysdep.c (wait_for_termination_1, wait_for_termination)
 ++     (interruptible_wait_for_termination, mkdir):
 ++     Don't assume pid_t fits in int; on 64-bit AIX pid_t is 64-bit.
 ++     (emacs_read, emacs_write):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (system_process_attributes): Don't assume uid_t, gid_t, EMACS_INT,
 ++     and double all fit in int.
 ++     * term.c (set_tty_color_mode):
 ++     Check that fixnums are in proper range for system types.
 ++     * termhooks.h (struct input_event):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     * textprop.c (validate_interval_range, interval_of)
 ++     (Fadd_text_properties, set_text_properties_1)
 ++     (Fremove_text_properties, Fremove_list_of_text_properties)
 ++     (Ftext_property_any, Ftext_property_not_all)
 ++     (copy_text_properties, text_property_list, extend_property_ranges)
 ++     (verify_interval_modification):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (Fnext_single_char_property_change)
 ++     (Fprevious_single_char_property_change):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (copy_text_properties):
 ++     Check for integer overflow in index calculation.
 ++     * undo.c (last_boundary_position, record_point, record_insert)
 ++     (record_delete, record_marker_adjustment, record_change)
 ++     (record_property_change):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (truncate_undo_list, Fprimitive_undo): Don't assume fixnum fits in int.
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     * w32fns.c (Fx_create_frame, x_create_tip_frame, Fx_show_tip)
 ++     (Fx_hide_tip, Fx_file_dialog):
 ++     * w32menu.c (set_frame_menubar):
 ++     Use ptrdiff_t, not int, for consistency with rest of code.
 ++     * window.c (window_scroll_preserve_hpos, window_scroll_preserve_vpos)
 ++     (select_window, Fdelete_other_windows_internal)
 ++     (window_scroll_pixel_based, window_scroll_line_based)
 ++     (Frecenter, Fset_window_configuration):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (Fset_window_hscroll, run_window_configuration_change_hook)
 ++     (set_window_buffer, temp_output_buffer_show, scroll_command)
 ++     (Fscroll_other_window, Frecenter):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (Fwindow_line_height, window_scroll, Fscroll_left, Fscroll_right):
 ++     Don't assume fixnum fits in int.
 ++     (Fset_window_scroll_bars):
 ++     Check that fixnums are in proper range for system types.
 ++     * xdisp.c (help_echo_pos, pos_visible_p, string_pos_nchars_ahead)
 ++     (string_pos, c_string_pos, number_of_chars, init_iterator)
 ++     (in_ellipses_for_invisible_text_p, init_from_display_pos)
 ++     (compute_stop_pos, next_overlay_change, compute_display_string_pos)
 ++     (compute_display_string_end, handle_face_prop)
 ++     (face_before_or_after_it_pos, handle_invisible_prop)
 ++     (handle_display_prop, handle_display_spec, handle_single_display_spec)
 ++     (display_prop_intangible_p, string_buffer_position_lim)
 ++     (string_buffer_position, handle_composition_prop, load_overlay_strings)
 ++     (get_overlay_strings_1, get_overlay_strings)
 ++     (iterate_out_of_display_property, forward_to_next_line_start)
 ++     (back_to_previous_visible_line_start, reseat, reseat_to_string)
 ++     (get_next_display_element, set_iterator_to_next)
 ++     (get_visually_first_element, compute_stop_pos_backwards)
 ++     (handle_stop_backwards, next_element_from_buffer)
 ++     (move_it_in_display_line_to, move_it_in_display_line)
 ++     (move_it_to, move_it_vertically_backward, move_it_by_lines)
 ++     (add_to_log, message_dolog, message_log_check_duplicate)
 ++     (message2, message2_nolog, message3, message3_nolog
 ++     (with_echo_area_buffer, display_echo_area_1, resize_mini_window_1)
 ++     (current_message_1, truncate_echo_area, truncate_message_1)
 ++     (set_message, set_message_1, store_mode_line_noprop)
 ++     (hscroll_window_tree, debug_delta, debug_delta_bytes, debug_end_vpos)
 ++     (text_outside_line_unchanged_p, check_point_in_composition)
 ++     (reconsider_clip_changes)
 ++     (redisplay_internal, set_cursor_from_row, try_scrolling)
 ++     (try_cursor_movement, set_vertical_scroll_bar, redisplay_window)
 ++     (redisplay_window, find_last_unchanged_at_beg_row)
 ++     (find_first_unchanged_at_end_row, row_containing_pos, try_window_id)
 ++     (trailing_whitespace_p, find_row_edges, display_line)
 ++     (RECORD_MAX_MIN_POS, Fcurrent_bidi_paragraph_direction)
 ++     (display_mode_element, store_mode_line_string)
 ++     (pint2str, pint2hrstr, decode_mode_spec)
 ++     (display_count_lines, display_string, draw_glyphs)
 ++     (x_produce_glyphs, x_insert_glyphs)
 ++     (rows_from_pos_range, mouse_face_from_buffer_pos)
 ++     (fast_find_string_pos, mouse_face_from_string_pos)
 ++     (note_mode_line_or_margin_highlight, note_mouse_highlight):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (safe_call, init_from_display_pos, handle_fontified_prop)
 ++     (handle_single_display_spec, load_overlay_strings)
 ++     (with_echo_area_buffer, setup_echo_area_for_printing)
 ++     (display_echo_area, echo_area_display)
 ++     (x_consider_frame_title, prepare_menu_bars, update_menu_bar)
 ++     (update_tool_bar, hscroll_window_tree, redisplay_internal)
 ++     (redisplay_window, dump_glyph_row, display_mode_line)
 ++     (Fformat_mode_line, decode_mode_spec, on_hot_spot_p):
 ++     (handle_display_spec, display_prop_string_p):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (handle_single_display_spec, build_desired_tool_bar_string)
 ++     (redisplay_tool_bar, scroll_window_tree, Fdump_glyph_matrix)
 ++     (get_specified_cursor_type):
 ++     Check that fixnums are in proper range for system types.
 ++     (struct overlay_entry, resize_mini_window, Fdump_glyph_row)
 ++     (Flookup_image_map):
 ++     Don't assume fixnums fit in int.
 ++     (compare_overlay_entries):
 ++     Avoid mishandling comparisons due to subtraction overflow.
 ++     (load_overlay_strings): Use SAFE_NALLOCA, not alloca.
 ++     (last_escape_glyph_face_id, last_glyphless_glyph_face_id):
 ++     (handle_tool_bar_click):
 ++     Use int, not unsigned, since we prefer signed and the signedness
 ++     doesn't matter here.
 ++     (get_next_display_element, next_element_from_display_vector):
 ++     Use int, not EMACS_INT, when int is wide enough.
 ++     (start_hourglass): Use duration_to_sec_usec to do proper
 ++     overflow checking on durations.
 ++     * xfaces.c (Fbitmap_spec_p):
 ++     Check that fixnums are in proper range for system types.
 ++     (compare_fonts_by_sort_order):
 ++     Avoid mishandling comparisons due to subtraction overflow.
 ++     (Fx_family_fonts, realize_basic_faces):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (Fx_family_fonts):
 ++     Don't assume fixnum fits in int.
 ++     Use SAFE_ALLOCA_LISP, not alloca.
 ++     (merge_face_heights): Remove unnecessary cast to EMACS_INT.
 ++     (Finternal_make_lisp_face): Don't allocate more than MAX_FACE_ID.
 ++     (face_at_buffer_position, face_for_overlay_string)
 ++     (face_at_string_position):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     (merge_faces): Use int, not EMACS_INT, where int is wide enough.
 ++     * xfns.c (x_set_menu_bar_lines, x_set_tool_bar_lines, x_icon_verify)
 ++     (Fx_show_tip):
 ++     Check that fixnums are in proper range for system types.
 ++     (Fx_create_frame, x_create_tip_frame, Fx_show_tip)
 ++     (Fx_hide_tip, Fx_file_dialog, Fx_select_font):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (Fx_change_window_property): Don't assume fixnums fit in int.
 ++     * xfont.c (xfont_chars_supported):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     * xmenu.c (Fx_popup_dialog, set_frame_menubar)
 ++     (create_and_show_popup_menu, create_and_show_dialog, xmenu_show):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     * xml.c (parse_region):
 ++     * xrdb.c (magic_file_p):
 ++     Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
 ++     * xselect.c (TRACE1): Don't assume pid_t promotes to int.
 ++     (x_get_local_selection, x_reply_selection_request)
 ++     (x_handle_selection_request, wait_for_property_change):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     (selection_data_to_lisp_data): Use short, not EMACS_INT, where
 ++     short is wide enough.
 ++     (x_send_client_event): Don't assume fixnum fits in int.
 ++     * xterm.c (x_x_to_emacs_modifiers):
 ++     Don't assume EMACS_INT overflows nicely into int.
 ++     (x_emacs_to_x_modifiers): Use EMACS_INT, not int, because values
 ++     may come from Lisp.
 ++     (handle_one_xevent): NATNUMP can eval its arg twice.
 ++     (x_connection_closed):
 ++     Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
 ++     * xterm.h: Adjust decls to match defn changes elsewhere.
 ++     (struct scroll_bar): Use struct vectorlike_header
 ++     rather than rolling our own approximation.
 ++     (SCROLL_BAR_VEC_SIZE): Remove; not used.
 ++
++ 2011-11-18  Paul Eggert  <eggert@cs.ucla.edu>
++ 
++      Fix minor problems found by static checking.
++      * dispextern.h, xdisp.c (row_hash): Declare extern only if XASSERTS.
++      * dispnew.c (verify_row_hash): Now static.
++ 
+  2011-11-18  Dmitry Antipov  <dmantipov@yandex.ru>
+  
+       * keymap.c (Fwhere_is_internal): Add missing RETURN_UNGCPROs.
+  
+  2011-11-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+  
+       * intervals.c: Fix grafting over the whole buffer (bug#10071).
+       (graft_intervals_into_buffer): Simplify.
+  
+  2011-11-18  Eli Zaretskii  <eliz@gnu.org>
+  
+       * dispnew.c (swap_glyph_pointers): Swap the used[] arrays and the
+       hash values of the two rows.
+       (copy_row_except_pointers): Preserve the used[] arrays and the
+       hash values of the two rows.  (Bug#10035)
+       (add_row_entry): Add xassert to verify that ROW's hash code is valid.
+  
+       * xdisp.c (row_hash): New function, body extracted from
+       compute_line_metrics.
+       (compute_line_metrics): Call row_hash, instead of computing the
+       hash code inline.
+  
+       * dispnew.c (verify_row_hash): Call row_hash for computing the
+       hash code of a row, instead of duplicating code from xdisp.c.
+  
+       * dispextern.h (row_hash): Add prototype.
+  
+  2011-11-18  Tassilo Horn  <tassilo@member.fsf.org>
+  
+       * frame.c (delete_frame): Don't delete the terminal when the last
+       X frame is closed if emacs is built with GTK toolkit.
+  
+  2011-11-17  Juanma Barranquero  <lekktu@gmail.com>
+  
+       * window.c (syms_of_window) <window-combination-resize>: Fix typo.
+  
+  2011-11-17  Martin Rudalics  <rudalics@gmx.at>
+  
+       * window.c (Vwindow_splits): Rename to
+       Vwindow_combination_resize.  Suggested by Juri Linkov.
+       (Fsplit_window_internal): Use Vwindow_combination_resize instead
+       of Vwindow_splits.
+  
+  2011-11-16  Juanma Barranquero  <lekktu@gmail.com>
+  
+       * nsfns.m (Fns_font_name):
+       * window.c (syms_of_window) <window-combination-limit>: Fix typos.
+  
+  2011-11-16  Martin Rudalics  <rudalics@gmx.at>
+  
+       * window.h (window): Rename slot "nest" to "combination_limit".
+       * window.c (Fwindow_nest): Rename to Fwindow_combination_limit.
+       (Fset_window_nest): Rename to Fset_window_combination_limit.
+       (Vwindow_nest): Rename to Vwindow_combination_limit.
+       (recombine_windows, make_parent_window, make_window)
+       (Fsplit_window_internal, saved_window)
+       (Fset_window_configuration, save_window_save): Rename all
+       occurrences of window_nest to window_combination_limit.
+  
+  2011-11-15  Juanma Barranquero  <lekktu@gmail.com>
+  
+       * image.c (imagemagick_load_image): Fix typo.
+  
+  2011-11-14  Eli Zaretskii  <eliz@gnu.org>
+  
+       * xdisp.c (display_line): Move the call to
+       highlight_trailing_whitespace before the call to
+       compute_line_metrics, since the latter needs to see the final
+       faces of all the glyphs to compute ROW's hash value.  Fixes
+       assertion violations in row_equal_p.  (Bug#10035)
+  
+  2011-11-14  Juanma Barranquero  <lekktu@gmail.com>
+  
+       * w32proc.c (reader_thread): Don't check pending input if cp->fd < 0,
+       just return (bug#10044).
+  
+  2011-11-12  Eli Zaretskii  <eliz@gnu.org>
+  
+       * makefile.w32-in (HEAPSIZE): New variable, allows to build temacs
+       with user-defined heap size.  Bump the default size of the temacs
+       heap to 27MB, to avoid memory warning when running temacs.
+       ($(TEMACS)): Use HEAPSIZE instead of a hardcoded value.
+  
+       * dispnew.c (scrolling_window): Fix incorrect indices in accessing
+       current_matrix and desired_matrix.  (Bug#9990)
+       (verify_row_hash) [XASSERTS]: New function.
+       (adjust_glyph_matrix, row_equal_p): Use it in xassert to verify
+       that the hash value of glyph rows is correct.
+  
+  2011-11-12  Martin Rudalics  <rudalics@gmx.at>
+  
+       * window.h (window): Remove splits slot.
+       * window.c (Fwindow_splits, Fset_window_splits): Remove.
+       (Fdelete_other_windows_internal, make_parent_window)
+       (make_window, Fsplit_window_internal, Fdelete_window_internal)
+       (Fset_window_configuration, save_window_save): Don't deal with
+       split status of windows.
+       (saved_window): Remove splits slot.
+       (Vwindow_splits): Rewrite doc-string.
+  
+  2011-11-11  Jan Djärv  <jan.h.d@swipnet.se>
+  
+       * xfns.c (unwind_create_frame):
+       * nsfns.m (unwind_create_frame):
+       * w32fns.c (unwind_create_frame): Use Fmemq to check if frame is in
+       Vframe_list (Bug#9999).
+  
+  2011-11-11  Dmitry Antipov  <dmantipov@yandex.ru>
+  
+       * xdisp.c (syms_of_xdisp): Remove duplicated definition of Qtext.
+  
+  2011-11-11  Kenichi Handa  <handa@m17n.org>
+  
+       * callproc.c (Fcall_process): Set the member dst_multibyte of
+       process_coding.
+  
+  2011-11-11  Johan BockgÃ¥rd  <bojohan@gnu.org>
+  
+       * xdisp.c (fill_composite_glyph_string): Always set s->face, to
+       avoid a crash (bug#9496).
+  
+  2011-11-09  Chong Yidong  <cyd@gnu.org>
+  
+       * window.c (Fwindow_inside_edges, Fwindow_inside_pixel_edges)
+       (Fwindow_inside_absolute_pixel_edges): Only allow live windows.
+  
+  2011-11-08  Paul Eggert  <eggert@cs.ucla.edu>
+  
+       * s/gnu.h (GC_MARK_STACK): Define to GC_MAKE_GCPROS_NOOPS (Bug#9926).
+  
+  2011-11-08  Paul Eggert  <eggert@cs.ucla.edu>
+  
+       Avoid some portability problems by eschewing 'extern inline' functions.
+       The trivial performance wins aren't worth the portability hassles; see
+       <http://lists.gnu.org/archive/html/emacs-devel/2011-11/msg00084.html>
+       et seq.
+       * dispextern.h (window_box, window_box_height, window_text_bottom_y)
+       (window_box_width, window_box_left, window_box_left_offset)
+       (window_box_right, window_box_right_offset): Undo previous change,
+       by removing the "extern"s.
+       * intervals.c (adjust_intervals_for_insertion)
+       (adjust_intervals_for_deletion): Undo previous change,
+       making these static again.
+       (offset_intervals, temp_set_point_both, temp_set_point)
+       (copy_intervals_to_string): No longer inline.
+       * xdisp.c (window_text_bottom_y, window_box_width)
+       (window_box_height, window_box_left_offset)
+       (window_box_right_offset, window_box_left, window_box_right)
+       (window_box): No longer inline.
+  
+  2011-11-08  Chong Yidong  <cyd@gnu.org>
+  
+       * window.c (Fwindow_left_column, Fwindow_top_line): Doc fix.
+       (Fwindow_body_height, Fwindow_body_width): Move from Lisp.  Signal
+       an error if not a live window.
+       (Fwindow_total_width, Fwindow_total_height): Move from Lisp.
+       (Fwindow_total_size, Fwindow_body_size): Move to Lisp.
+  
+  2011-11-07  Juanma Barranquero  <lekktu@gmail.com>
+  
+       * lisp.h (syms_of_abbrev): Remove declaration.
+       Reported by CHENG Gao <chenggao@royau.me>.
+  
+  2011-11-07  Eli Zaretskii  <eliz@gnu.org>
+  
+       * w32.c (check_windows_init_file): Don't look for term/w32-win.el
+       if Vpurify_flag is non-nil.  Fixes a crash when running w32 build
+       of temacs in GUI mode.
+  
+  2011-11-07  Martin Rudalics  <rudalics@gmx.at>
+  
+       * window.h: Declare delete_all_child_windows instead of
+       delete_all_subwindows.
+       * window.c (Fwindow_nest, Fset_window_nest)
+       (Fset_window_new_total, Fset_window_new_normal)
+       (Fwindow_resize_apply): Don't use term subwindow in doc-strings.
+       (delete_all_subwindows): Rename to delete_all_child_windows.
+       (Fdelete_other_windows_internal, Fset_window_configuration):
+       Call delete_all_child_windows instead of delete_all_subwindows.
+       * frame.c (delete_frame): Call delete_all_child_windows instead
+       of delete_all_subwindows.
+  
+  2011-11-07  Paul Eggert  <eggert@cs.ucla.edu>
+  
+       * alloc.c (DEADP): New macro, for porting to GNU/Hurd (Bug#9926).
+       This is also needed for porting to any host where GC_MARK_STACK is
+       not GC_MAKE_GCPROS_NOOPS.
+       (which_symbols): Use it.
+  
+  2011-11-07  Kenichi Handa  <handa@m17n.org>
+  
+       * coding.c (coding_set_destination): Check coding->src_pos only
+       when coding->src_object is a buffer (bug#9910).
+  
+       * process.c (send_process): Set the member src_multibyte of coding
+       to 0 (bug#9911) when sending a unibyte text.
+  
+       * callproc.c (Fcall_process): Set the member src_multibyte of
+       process_coding to 0 (bug#9912).
+  
+  2011-11-06  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+  
+       * xmenu.c (cleanup_widget_value_tree): New function.
+       (xmenu_show, xdialog_show): Use it in record_unwind_protect instead of
+       calling free_menubar_widget_value_tree directly (Bug#9830).
+  
+  2011-11-06  Paul Eggert  <eggert@cs.ucla.edu>
+  
+       Fix some portability problems with 'inline'.
+       * dispextern.h (window_box, window_box_height, window_text_bottom_y)
+       (window_box_width, window_box_left, window_box_left_offset)
+       (window_box_right, window_box_right_offset): Declare extern.
+       Otherwise, these inline functions do not conform to C99 and
+       are miscompiled by Microsoft compilers.  Reported by Eli Zaretskii in
+       <http://lists.gnu.org/archive/html/emacs-devel/2011-11/msg00084.html>.
+       * intervals.c (adjust_intervals_for_insertion)
+       (adjust_intervals_for_deletion): Now extern, because otherwise the
+       extern inline functions 'offset_intervals' couldn't refer to it.
+       (static_offset_intervals): Remove.
+       (offset_intervals): Rewrite using the old contents of
+       static_offset_intervals.  The old version didn't conform to C99
+       because an extern inline function contained a reference to an
+       identifier with static linkage.
+  
+  2011-11-06  Andreas Schwab  <schwab@linux-m68k.org>
+  
+       * keyboard.c (interrupt_signal): Don't call kill-emacs while in
+       GC.
+  
+  2011-11-06  Eli Zaretskii  <eliz@gnu.org>
+  
+       * xdisp.c (init_iterator, reseat_to_string): Don't set the
+       iterator's bidi_p flag if Vpurify_flag is non-nil.  (Bug#9963)
+       (Fcurrent_bidi_paragraph_direction): If Vpurify_flag is non-nil,
+       return Qleft_to_right.
+  
+  2011-11-06  Chong Yidong  <cyd@gnu.org>
+  
+       * window.c (Fwindow_live_p, Fwindow_frame, Fframe_root_window)
+       (Fminibuffer_window, Fwindow_buffer, Fwindow_splits)
+       (Fset_window_splits, Fwindow_nest, Fset_window_nest)
+       (Fwindow_use_time, Fwindow_total_size, Fwindow_normal_size)
+       (Fwindow_new_normal, Fwindow_left_column, Fwindow_top_line)
+       (Fwindow_margins, Fwindow_fringes, Fwindow_scroll_bars)
+       (Fwindow_vscroll): Doc fix.
+       (Fwindow_top_child, Fwindow_left_child): Eliminate a nil default
+       argument, since it makes no sense to pass a live window and for
+       consistency with window-child.
+  
+  2011-11-05  Christoph Scholtes  <cschol2112@googlemail.com>
+  
+       * makefile.w32-in ($(TEMACS), (gl-stamp)): Use $(THISDIR) to
+       support MSVC.
+  
+  2011-11-05  Jason Rumney  <jasonr@gnu.org>
+  
+       * w32font.c (font_matches_spec): Filter out non-Japanese kana fonts.
+       (add_font_entity_to_list): Filter out non-Japanese Shift-JIS
+       fonts (Bug#6029).
+       (add_font_entity_to_list): Fix logic errors in mixed boolean and
+       bitwise arithmetic preventing use of unicode-sip and non-truetype
+       opentype fonts.
+  
+  2011-11-05  Eli Zaretskii  <eliz@gnu.org>
+  
+       * s/ms-w32.h (fstat, stat, utime): Move redirections to
+       "emacs"-only part.
+  
+       * w32fns.c (x_create_tip_frame, Fx_create_frame): Rearrange
+       initialization code to keep similarity to xfns.c after changes
+       from 2011-11-05.
+  
+  2011-11-05  Jan Djärv  <jan.h.d@swipnet.se>
+  
+       * nsfns.m: Declare image_cache_refcount if GLYPH_DEBUG.
+       (unwind_create_frame): New function (Bug#9943).
+       (Fx_create_frame): Restructure code to be more similar to the one in
+       xfns.c.  Call record_unwind_protect with unwind_create_frame (Bug#9943).
+       Initialize image_cache_refcount if GLYPH_DEBUG (Bug#9943).
+       Move terminal->reference_count++ just before making the frame official
+       (Bug#9943).
+  
+       * nsterm.m (x_free_frame_resources): New function.
+       (x_destroy_window): Move code to x_free_frame_resources.
+  
+       * xfns.c (unwind_create_frame): Fix comment.
+       (Fx_create_frame, x_create_tip_frame): Move
+       terminal->reference_count++ just before making the frame
+       official. Move initialization of image_cache_refcount and
+       dpyinfo_refcount before calling init_frame_faces (Bug#9943).
+  
+  2011-11-05  Eli Zaretskii  <eliz@gnu.org>
+  
+       Support MSVC build with newer versions of Visual Studio.
+       * makefile.w32-in (TAGS-gmake): Don't use $(patsubst ...), as
+       Nmake barfs on that.  Use $(OBJ*_c) variables instead, defined on
+       nt/gmake.defs.
+  
+       * lisp.h (ENUM_BF): New macro, for enumerated types in bitfields,
+       which are not supported by MSVC.
+       (Lisp_Symbol, Lisp_Misc_Any, Lisp_Marker, Lisp_Misc_Overlay)
+       (Lisp_Save_Value, Lisp_Free): Use ENUM_BF for enumerated types in
+       bitfields.
+       (Lisp_Object) [USE_LISP_UNION_TYPE]: Use ENUM_BF for enumerated
+       types in bitfields.
+       (DEFUN) [_MSC_VER]: Define in a different way for MSVC.
+  
+       * w32fns.c [_MSC_VER]: DECLARE_HANDLE for any MSVC version.
+  
+  2011-11-05  Fabrice Popineau  <fabrice.popineau@supelec.fr>  (tiny change)
+  
+       Support MSVC build with newer versions of Visual Studio.
+       * w32.c: Don't include w32api.h for MSVC.
+       (init_environment) [_MSC_VER]: Call sys_access, not _access.
+  
+       * s/ms-w32.h <sigset_t, ssize_t> [_MSC_VER]: Typedefs for MSVC.
+       [_MSC_VER]: Include sys/timeb.h, sys/stat.h, and signal.h.
+       (fstat, stat, utime) [_MSC_VER]: Redirect to their sys_* cousins.
+       (malloc, free, realloc, calloc) [_MSC_VER]: Always redirect to the
+       e_* cousins.
+       (alloca) [_MSC_VER]: Define to _alloca.
+  
+       * lisp.h (DECL_ALIGN) [_MSC_VER]: Define for MSVC.
+  
+       * regex.c <re_char> [_MSC_VER]: A separate definition for MSVC.
+  
+  2011-11-04  Eli Zaretskii  <eliz@gnu.org>
+  
+       * xdisp.c (note_mouse_highlight): If either of
+       previous/next-single-property-change returns nil, treat that as
+       the beginning or the end of the buffer.  (Bug#9955)
+  
+  2011-11-04  Jan Djärv  <jan.h.d@swipnet.se>
+  
+       * gtkutil.c (xg_make_tool_item): Add callbacks if one of wimage or
+       label is not null (Bug#9951).
+       (xg_tool_item_stale_p): Handle the fact that wimage and/or wlbl
+       may be NULL.
+  
+  2011-11-04  Eli Zaretskii  <eliz@gnu.org>
+  
+       * window.c (Fwindow_body_size): Mention in the doc string that the
+       return value is in frame's canonical units.  (Bug#9949)
+  
+  2011-11-03  Eli Zaretskii  <eliz@gnu.org>
+  
+       * xdisp.c (note_mouse_highlight): Initialize `area'.  (Bug#9947)
+  
+       * w32fns.c (unwind_create_frame): If needed, free the glyph
+       matrices of the partially constructed frame.  (Bug#9943)
+       * xfns.c (unwind_create_frame): Likewise.
+  
   2011-11-01  Eli Zaretskii  <eliz@gnu.org>
   
        * xdisp.c (mouse_face_from_buffer_pos): Fix a typo in a comment.
diff --cc src/alloc.c
index 86127dd519782efb8145007f813a15e91d880e17,5d04bd77872648d6acc87af63ebc1ee3f862f4dc,5d04bd77872648d6acc87af63ebc1ee3f862f4dc..f21f0b4fa3a549a0564e4f116b01dc3e947d6c22
@@@@ -6259,10 -6263,10 -6263,10 +6264,10 @@@@ Lisp_Objec
   which_symbols (Lisp_Object obj, EMACS_INT find_max)
   {
      struct symbol_block *sblk;
 --   int gc_count = inhibit_garbage_collection ();
 ++   ptrdiff_t gc_count = inhibit_garbage_collection ();
      Lisp_Object found = Qnil;
   
-     if (!EQ (obj, Vdead))
+     if (! DEADP (obj))
        {
          for (sblk = symbol_block; sblk; sblk = sblk->next)
         {
diff --cc src/buffer.c
Simple merge
diff --cc src/bytecode.c
Simple merge
diff --cc src/callproc.c
Simple merge
diff --cc src/ccl.c
index 4764fa0f5b5b09a59aa168a83bcb6c9a128bc227,6366f1acb8843ad26ca7250e09be4ade4ad1b240,6366f1acb8843ad26ca7250e09be4ade4ad1b240..97fca3bb032cec5a172e7b887dba6f4e6f64d5a9
+++ b/src/ccl.c
@@@@ -1808,10 -1808,10 -1808,10 +1808,10 @@@@ ccl_driver (struct ccl_program *ccl, in
   
   /* Resolve symbols in the specified CCL code (Lisp vector).  This
      function converts symbols of code conversion maps and character
-     translation tables embeded in the CCL code into their ID numbers.
+     translation tables embedded in the CCL code into their ID numbers.
   
 --   The return value is a vector (CCL itself or a new vector in which
 --   all symbols are resolved), Qt if resolving of some symbol failed,
 ++   The return value is a new vector in which all symbols are resolved,
 ++   Qt if resolving of some symbol failed,
      or nil if CCL contains invalid data.  */
   
   static Lisp_Object
diff --cc src/character.c
Simple merge
diff --cc src/charset.c
Simple merge
diff --cc src/charset.h
Simple merge
diff --cc src/chartab.c
Simple merge
diff --cc src/coding.c
Simple merge
diff --cc src/coding.h
Simple merge
diff --cc src/composite.c
Simple merge
diff --cc src/composite.h
Simple merge
diff --cc src/data.c
Simple merge
diff --cc src/dired.c
Simple merge
index b1c3d6237c900de2492fe1f4545f65318c63ba74,486aa4f7a407c85196f7f6bb0daed0d84ce37eea,48dd374f3c5276ade73d3c65b9ea8b38c10b37bc..ccb85e7422e03dad0fff8a3987a0981787dc29f2
@@@@ -3126,6 -3126,9 -3126,11 +3126,11 @@@@ void compute_fringe_widths (struct fram
   void w32_init_fringe (struct redisplay_interface *);
   void w32_reset_fringes (void);
   #endif
+  
++ #if XASSERTS
+  extern unsigned row_hash (struct glyph_row *);
++ #endif
+  
   /* Defined in image.c */
   
   #ifdef HAVE_WINDOW_SYSTEM
diff --cc src/dispnew.c
index 93a990cff477598ec0a5a1d627b2b9561106aaa8,d6bf6666ee20e2d93016bf5f8bb33eaac85bce3c,e4868a237d2ab043506368d213dcdd5302a5225b..88f75414074352920d910e4bf6fc2c3b70d949b5
@@@@ -429,6 -429,14 -429,14 +429,14 @@@@ margin_glyphs_to_reserve (struct windo
     return n;
   }
   
 - int
+  #if XASSERTS
+  /* Return non-zero if ROW's hash value is correct, zero if not.  */
++ static int
+  verify_row_hash (struct glyph_row *row)
+  {
+    return row->hash == row_hash (row);
+  }
+  #endif
   
   /* Adjust glyph matrix MATRIX on window W or on a frame to changed
      window sizes.
diff --cc src/doprnt.c
Simple merge
diff --cc src/emacs.c
Simple merge
diff --cc src/font.c
Simple merge
diff --cc src/font.h
Simple merge
diff --cc src/fontset.c
index 891a89f8cd04aee07aed529c37964579cede3588,34b2131832f9e4ea779675034dddedfe3f75590b,34b2131832f9e4ea779675034dddedfe3f75590b..ae9194686953813c512f8103f11c7567bc33f77a
@@@@ -1702,9 -1700,9 -1700,9 +1702,9 @@@@ FONT-SPEC is a vector, a cons, or a str
   static Lisp_Object auto_fontset_alist;
   
   /* Number of automatically created fontsets.  */
 --static printmax_t num_auto_fontsets;
 ++static ptrdiff_t num_auto_fontsets;
   
-  /* Retun a fontset synthesized from FONT-OBJECT.  This is called from
+  /* Return a fontset synthesized from FONT-OBJECT.  This is called from
      x_new_font when FONT-OBJECT is used for the default ASCII font of a
      frame, and the returned fontset is used for the default fontset of
      that frame.  The fontset specifies a font of the same registry as
diff --cc src/frame.c
Simple merge
diff --cc src/frame.h
Simple merge
diff --cc src/gtkutil.c
Simple merge
diff --cc src/image.c
Simple merge
diff --cc src/indent.c
Simple merge
diff --cc src/insdel.c
Simple merge
diff --cc src/intervals.c
index e8ff5bce5b64308a26db6589e451c858b88cb9ed,35d05d021f0d52f78b69f588202607d3e21681f7,35d05d021f0d52f78b69f588202607d3e21681f7..6f8dda4294eb26bef8e72da3493bb4b6522463a2
@@@@ -1317,10 -1317,10 -1317,10 +1317,10 @@@@ interval_deletion_adjustment (register 
     if (NULL_INTERVAL_P (tree))
       return 0;
   
-    /* Left branch */
+    /* Left branch */
     if (relative_position < LEFT_TOTAL_LENGTH (tree))
       {
 --      EMACS_INT subtract = interval_deletion_adjustment (tree->left,
 ++      ptrdiff_t subtract = interval_deletion_adjustment (tree->left,
                                                         relative_position,
                                                         amount);
         tree->total_length -= subtract;
@@@@ -1425,9 -1425,8 -1425,8 +1425,8 @@@@ adjust_intervals_for_deletion (struct b
      compiler that does not allow calling a static function (here,
      adjust_intervals_for_deletion) from a non-static inline function.  */
   
-  static inline void
-  static_offset_intervals (struct buffer *buffer, ptrdiff_t start,
-                        ptrdiff_t length)
+  void
 --offset_intervals (struct buffer *buffer, EMACS_INT start, EMACS_INT length)
+++offset_intervals (struct buffer *buffer, ptrdiff_t start, ptrdiff_t length)
   {
     if (NULL_INTERVAL_P (BUF_INTERVALS (buffer)) || length == 0)
       return;
@@@@ -1884,9 -1860,9 -1860,9 +1860,9 @@@@ lookup_char_property (Lisp_Object plist
   /* Set point in BUFFER "temporarily" to CHARPOS, which corresponds to
      byte position BYTEPOS.  */
   
-  inline void
+  void
   temp_set_point_both (struct buffer *buffer,
 --                  EMACS_INT charpos, EMACS_INT bytepos)
 ++                  ptrdiff_t charpos, ptrdiff_t bytepos)
   {
     /* In a single-byte buffer, the two positions must be equal.  */
     if (BUF_ZV (buffer) == BUF_ZV_BYTE (buffer)
   
   /* Set point "temporarily", without checking any text properties.  */
   
-  inline void
+  void
 --temp_set_point (struct buffer *buffer, EMACS_INT charpos)
 ++temp_set_point (struct buffer *buffer, ptrdiff_t charpos)
   {
     temp_set_point_both (buffer, charpos,
                       buf_charpos_to_bytepos (buffer, charpos));
@@@@ -2393,9 -2369,9 -2369,9 +2369,9 @@@@ copy_intervals (INTERVAL tree, ptrdiff_
   
   /* Give STRING the properties of BUFFER from POSITION to LENGTH.  */
   
-  inline void
+  void
   copy_intervals_to_string (Lisp_Object string, struct buffer *buffer,
 --                       EMACS_INT position, EMACS_INT length)
 ++                       ptrdiff_t position, ptrdiff_t length)
   {
     INTERVAL interval_copy = copy_intervals (BUF_INTERVALS (buffer),
                                           position, length);
diff --cc src/intervals.h
index d7d156b42dbcf391cbbeb7917daf6394edad2ece,977f3d965a49d53f1f95a8863d0d1da30bb3d01f,977f3d965a49d53f1f95a8863d0d1da30bb3d01f..be0cc43d03222ae9ad27c691da9d23ccd9637d12
@@@@ -286,14 -286,14 -286,14 +286,14 @@@@ extern INTERVAL update_interval (INTERV
   extern void set_intervals_multibyte (int);
   extern INTERVAL validate_interval_range (Lisp_Object, Lisp_Object *,
                                            Lisp_Object *, int);
 --extern INTERVAL interval_of (EMACS_INT, Lisp_Object);
 ++extern INTERVAL interval_of (ptrdiff_t, Lisp_Object);
   
-  /* Defined in xdisp.c */
+  /* Defined in xdisp.c */
   extern int invisible_p (Lisp_Object, Lisp_Object);
   
-  /* Declared in textprop.c */
+  /* Declared in textprop.c */
   
-  /* Types of hooks. */
+  /* Types of hooks.  */
   extern Lisp_Object Qpoint_left;
   extern Lisp_Object Qpoint_entered;
   extern Lisp_Object Qmodification_hooks;
diff --cc src/keyboard.c
Simple merge
diff --cc src/keymap.c
Simple merge
diff --cc src/lisp.h
Simple merge
diff --cc src/nsfns.m
index 80da9d7a9acbdf732382a80ed94ff78e44bd0365,280fee0b27b6057952e35c2581e30e24074fb0a2,280fee0b27b6057952e35c2581e30e24074fb0a2..f320a909497073d8a06971b5b9d54e8ab78a442c
@@@@ -1061,8 -1101,10 -1101,10 +1101,10 @@@@ This function is an internal primitive-
     Lisp_Object frame, tem;
     Lisp_Object name;
     int minibuffer_only = 0;
 --  int count = specpdl_ptr - specpdl;
+    int window_prompting = 0;
+    int width, height;
 ++  ptrdiff_t count = specpdl_ptr - specpdl;
+    struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
     Lisp_Object display;
     struct ns_display_info *dpyinfo = NULL;
     Lisp_Object parent;
   
     FRAME_NS_DISPLAY_INFO (f) = dpyinfo;
   
+    /* With FRAME_NS_DISPLAY_INFO set up, this unwind-protect is safe.  */
+    record_unwind_protect (unwind_create_frame, frame);
+  
     f->output_data.ns->window_desc = desc_ctr++;
 --  if (!NILP (parent))
 ++  if (TYPE_RANGED_INTEGERP (Window, parent))
       {
 --      f->output_data.ns->parent_desc = (Window) XFASTINT (parent);
 ++      f->output_data.ns->parent_desc = XFASTINT (parent);
         f->output_data.ns->explicit_parent = 1;
       }
     else
diff --cc src/process.c
Simple merge
diff --cc src/sound.c
Simple merge
diff --cc src/w32fns.c
Simple merge
diff --cc src/w32menu.c
Simple merge
diff --cc src/window.c
Simple merge
diff --cc src/xdisp.c
index 698f217f2405b50a2485b01871fdd54844f2efbe,ae19e11565bb8ceb2d5158aa7e94f9b37cb8221c,65e2c1e4f001a16eee3223da8e496a0d6fab7a98..3883a753940e0ea66ee802c0d6d06193ab811e38
@@@@ -17948,6 -17949,23 -17949,26 +17956,26 @@@@ insert_left_trunc_glyphs (struct it *it
       }
   }
   
+  /* Compute the hash code for ROW.  */
++ #if !XASSERTS
++ static
++ #endif
+  unsigned
+  row_hash (struct glyph_row *row)
+  {
+    int area, k;
+    unsigned hashval = 0;
+  
+    for (area = LEFT_MARGIN_AREA; area < LAST_AREA; ++area)
+      for (k = 0; k < row->used[area]; ++k)
+        hashval = ((((hashval << 4) + (hashval >> 24)) & 0x0fffffff)
+                 + row->glyphs[area][k].u.val
+                 + row->glyphs[area][k].face_id
+                 + row->glyphs[area][k].padding_p
+                 + (row->glyphs[area][k].type << 2));
+  
+    return hashval;
+  }
   
   /* Compute the pixel height and width of IT->glyph_row.
   
@@@@ -26899,8 -26921,8 -26924,8 +26931,8 @@@@ note_mouse_highlight (struct frame *f, 
         && XFASTINT (w->last_modified) == BUF_MODIFF (b)
         && XFASTINT (w->last_overlay_modified) == BUF_OVERLAY_MODIFF (b))
       {
-        int hpos, vpos, dx, dy, area;
+        int hpos, vpos, dx, dy, area = LAST_AREA;
 --      EMACS_INT pos;
 ++      ptrdiff_t pos;
         struct glyph *glyph;
         Lisp_Object object;
         Lisp_Object mouse_face = Qnil, position;
diff --cc src/xfaces.c
Simple merge
diff --cc src/xfns.c
Simple merge
diff --cc src/xfont.c
Simple merge
diff --cc src/xmenu.c
index eab25d709f6ed9ad0e23e1ec82c5bb4d1a6a6d35,0dd652b566d1e710444e851b491d9b18bc7e7c3e,0dd652b566d1e710444e851b491d9b18bc7e7c3e..d73051be6dee6bfe56f3b39eb319d93ecfe5426c
@@@@ -1618,6 -1629,8 -1629,8 +1629,8 @@@@ xmenu_show (FRAME_PTR f, int x, int y, 
   
     int first_pane;
   
 --  int specpdl_count = SPECPDL_INDEX ();
+++  ptrdiff_t specpdl_count = SPECPDL_INDEX ();
+  
     if (! FRAME_X_P (f))
       abort ();
   
@@@@ -2003,6 -2020,8 -2020,8 +2020,8 @@@@ xdialog_show (FRAME_PTR f
     /* 1 means we've seen the boundary between left-hand elts and right-hand.  */
     int boundary_seen = 0;
   
 --  int specpdl_count = SPECPDL_INDEX ();
+++  ptrdiff_t specpdl_count = SPECPDL_INDEX ();
+  
     if (! FRAME_X_P (f))
       abort ();
   
diff --cc src/xselect.c
Simple merge
diff --cc src/xterm.c
Simple merge
diff --cc src/xterm.h
Simple merge