Merge from trunk.
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 11 Dec 2011 00:56:50 +0000 (16:56 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 11 Dec 2011 00:56:50 +0000 (16:56 -0800)
56 files changed:
1  2 
src/ChangeLog
src/alloc.c
src/bidi.c
src/buffer.c
src/buffer.h
src/callint.c
src/casetab.c
src/ccl.c
src/character.c
src/character.h
src/charset.c
src/chartab.c
src/coding.c
src/coding.h
src/data.c
src/dbusbind.c
src/dired.c
src/dispextern.h
src/dispnew.c
src/emacs.c
src/eval.c
src/fileio.c
src/fns.c
src/font.c
src/font.h
src/fontset.c
src/frame.c
src/fringe.c
src/ftfont.c
src/gtkutil.c
src/image.c
src/intervals.c
src/keyboard.c
src/lisp.h
src/lread.c
src/minibuf.c
src/nsfns.m
src/nsfont.m
src/print.c
src/process.c
src/puresize.h
src/search.c
src/sound.c
src/sysdep.c
src/term.c
src/textprop.c
src/w32fns.c
src/w32menu.c
src/window.c
src/xdisp.c
src/xfaces.c
src/xfns.c
src/xmenu.c
src/xselect.c
src/xterm.c
src/xterm.h

diff --cc src/ChangeLog
- 2011-11-18  Paul Eggert  <eggert@cs.ucla.edu>
++2011-12-11  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)
++      (CODING_ENCODE_CHAR, CODING_CHAR_CHARSET, CODING_CHAR_CHARSET_P)
 +      (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):
++      (Fdefine_coding_system_internal)
++      (coding_set_source, coding_set_destination):
 +      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>
+ 2011-12-10  Jan Djärv  <jan.h.d@swipnet.se>
  
-       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.
+       * xterm.c (x_term_init): Move call to gdk_window_add_filter before
+       gtk_init (Bug#10100).
+ 2011-12-10  Eli Zaretskii  <eliz@gnu.org>
+       * xdisp.c (RECORD_MAX_MIN_POS): Use IT->cmp_it.charpos only if
+       IT->string is nil.  (Bug#10263)
+ 2011-12-10  Jan Djärv  <jan.h.d@swipnet.se>
+       * nsterm.h (x_free_frame_resources): Declare.
+       * nsfns.m (ns_get_defaults_value): New function (Bug#10103).
+       (Fns_get_resource, x_get_string_resource): Call ns_get_defaults_value.
+       * nsterm.h (ns_get_defaults_value): Declare.
+       * nsterm.m (ns_default): Call ns_get_defaults_value.
+ 2011-12-09  Eli Zaretskii  <eliz@gnu.org>
+       * xdisp.c (try_scrolling): Don't set scroll_down_p if dy is zero.
+       (Bug#10170)
+ 2011-12-09  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+       * unexelf.c (unexec) [NS_IMPL_GNUSTEP]: Take account of the case
+       that where the value of an _OBJC_* symbol points to is in the .bss
+       section (Bug#10240).
+ 2011-12-08  Kazuhiro Ito  <kzhr@d1.dion.ne.jp>  (tiny change)
+       * coding.c (encode_coding_ccl): Check (charbuf < charbuf_end)
+       after the loop to call ccl_driver at least once (Bug#8619).
+ 2011-12-08  Kenichi Handa  <handa@m17n.org>
+       * ftfont.c (get_adstyle_property): Fix previous change
+       (Bug#10233).
+ 2011-12-07  Juanma Barranquero  <lekktu@gmail.com>
+       * w32.c (init_environment): If no_site_lisp, remove site-lisp
+       dirs from the default value of EMACSLOADPATH (bug#10208).
+ 2011-12-07  Glenn Morris  <rgm@gnu.org>
+       * lread.c (init_lread): If no_site_lisp, exclude site-lisp/ in
+       installation and source directories as well.  (Bug#10208)
+ 2011-12-06  Chong Yidong  <cyd@gnu.org>
+       * minibuf.c (Fread_from_minibuffer): Doc fix (Bug#10228).
+ 2011-12-06  Glenn Morris  <rgm@gnu.org>
+       * process.c (start_process_unwind): Treat any pid <= 0, except -2,
+       as an error, not just -1.  (Bug#10217)
+ 2011-12-05  Chong Yidong  <cyd@gnu.org>
+       * keyboard.c (process_special_events): New function.
+       (swallow_events, Finput_pending_p): Use it (Bug#10195).
+ 2011-12-05  Paul Eggert  <eggert@cs.ucla.edu>
+       * coding.c (encode_designation_at_bol): Don't use uninitialized
+       local variable (Bug#9318).
+ 2011-12-05  Kenichi Handa  <handa@m17n.org>
+       * ftfont.c (get_adstyle_property): If the font is not BDF nor PCF,
+       return Qnil (Bug#8046, Bug#10193).
+ 2011-12-05  Kenichi Handa  <handa@m17n.org>
+       * coding.c (encode_designation_at_bol): New args charbuf_end and
+       dst.  Return the number of produced bytes.  Callers changed.
+       (coding_set_source): Return how many bytes coding->source was
+       relocated.
+       (coding_set_destination): Return how many bytes
+       coding->destination was relocated.
+       (CODING_DECODE_CHAR, CODING_ENCODE_CHAR, CODING_CHAR_CHARSET)
+       (CODING_CHAR_CHARSET_P): Adjusted for the avove changes.
+ 2011-12-05  Kazuhiro Ito  <kzhr@d1.dion.ne.jp>  (tiny change)
+       * coding.c (CODING_CHAR_CHARSET_P): New macro.
+       (encode_coding_emacs_mule, encode_coding_iso_2022): Use the above
+       macro (Bug#9318).
+ 2011-12-05  Andreas Schwab  <schwab@linux-m68k.org>
+       The following changes are to fix Bug#9318.
+       * coding.c (CODING_ENCODE_CHAR, CODING_CHAR_CHARSET): New macros.
+       (encode_coding_emacs_mule, ENCODE_ISO_CHARACTER)
+       (encode_coding_iso_2022, encode_coding_sjis)
+       (encode_coding_big5, encode_coding_charset): Use the above macros.
+ 2011-12-05  Juanma Barranquero  <lekktu@gmail.com>
+       * lisp.h (process_quit_flag): Fix external declaration.
+ 2011-12-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+       Don't macro-inline non-performance-critical code.
+       * eval.c (process_quit_flag): New function.
+       * lisp.h (QUIT): Use it.
+ 2011-12-04  Jan Djärv  <jan.h.d@swipnet.se>
+       * nsfns.m (get_geometry_from_preferences): New function.
+       (Fx_create_frame): Call get_geometry_from_preferences (Bug#10103).
+ 2011-12-04  Andreas Schwab  <schwab@linux-m68k.org>
+       * emacs.c (Qkill_emacs): Define.
+       (syms_of_emacs): Initialize it.
+       * keyboard.c (interrupt_signal): Don't call Fkill_emacs here, set
+       Qquit_flag to `kill-emacs' instead.
+       (quit_throw_to_read_char): Add parameter `from_signal'.
+       All callers changed.  Call Fkill_emacs if requested and safe.
+       * lisp.h (QUIT): Call Fkill_emacs if requested.
+ 2011-12-03  Jan Djärv  <jan.h.d@swipnet.se>
+       * widget.c (update_wm_hints): Return if wmshell is null.
+       (widget_update_wm_size_hints): New function.
+       * widget.h (widget_update_wm_size_hints): Declare.
+       * xterm.c (x_wm_set_size_hint): If USE_X_TOOLKIT, call
+       widget_update_wm_size_hints (Bug#10104).
+ 2011-12-03  Eli Zaretskii  <eliz@gnu.org>
+       * xdisp.c (handle_invisible_prop): If the invisible text ends just
+       before a newline, prepare the bidi iterator for consuming the
+       newline, and keep the current paragraph direction.  (Bug#10183)
+       (redisplay_window): Don't let `margin' become negative.  (Bug#10192)
+ 2011-12-02  Juri Linkov  <juri@jurta.org>
+       * search.c (Fword_search_regexp): New Lisp function created from
+       `wordify'.  Change type of arg `lax' from `int' to `Lisp_Object'.
+       (Fword_search_backward, Fword_search_forward)
+       (Fword_search_backward_lax, Fword_search_forward_lax):
+       Use `Fword_search_regexp' instead of `wordify'.  Doc fix.
+       (syms_of_search): Define `Sword_search_regexp'.  (Bug#10145)
+ 2011-12-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * fileio.c (Finsert_file_contents): Move after-change-function call
+       to before the "handled:" label, since all "goto handled" appear in
+       cases where the *-change-functions have already been properly called
+       (bug#10117).
+ 2011-12-01  Andreas Schwab  <schwab@linux-m68k.org>
+       * keyboard.c (interrupt_signal): Don't call kill-emacs when
+       waiting for input.  (Bug#10169)
+ 2011-11-30  Eli Zaretskii  <eliz@gnu.org>
+       * dispnew.c (adjust_glyph_matrix): Remove the assertion that
+       verifies glyph row's hash code--we have just reallocated the
+       glyphs, so their contents can be complete garbage.  (Bug#10164)
+ 2011-11-30  Juanma Barranquero  <lekktu@gmail.com>
+       * dispnew.c (adjust_glyph_matrix) [XASSERTS]: Add missing check.
+ 2011-11-30  Eli Zaretskii  <eliz@gnu.org>
+       * dispnew.c (adjust_glyph_matrix) [XASSERTS]: Ensure ROW's
+       attributes are tested _before_ calling verify_row_hash, to protect
+       against GCC re-ordering of the tests.  (Bug#10164)
+ 2011-11-29  Jan Djärv  <jan.h.d@swipnet.se>
+       * xterm.h (struct x_output): net_wm_state_hidden_seen is new.
+       * xterm.c (handle_one_xevent): Only set async_visible and friends
+       if net_wm_state_hidden_seen is non-zero (Bug#10002)
+       (get_current_wm_state): Set net_wm_state_hidden_seen to 1 if
+       _NET_WM_STATE_HIDDEN is in NET_WM_STATE.
+ 2011-11-28  Paul Eggert  <eggert@cs.ucla.edu>
+       Remove GCPRO-related macros that exist only to avoid shadowing locals.
+       * lisp.h (GCPRO1_VAR, GCPRO2_VAR, GCPRO3_VAR, GCPRO4_VAR, GCPRO5_VAR)
+       (GCPRO6_VAR, UNGCPRO_VAR): Remove.  See
+       <http://lists.gnu.org/archive/html/emacs-diffs/2011-11/msg00265.html>.
+       All uses changed to use GCPRO1 etc.
+       (GCPRO1, GCPRO2, GCPRO3, GCPRO4, GCPRO5, GCPRO6, UNGCPRO):
+       Revert to old implementation (i.e., before 2011-03-11).
+ 2011-11-28  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+       * dispnew.c (scrolling_window): Truncate overlaps in copy destination
+       of scroll runs so as to avoid assigning disabled bogus rows and
+       unnecessary graphics copy operations.
+ 2011-11-27  Eli Zaretskii  <eliz@gnu.org>
+       * s/ms-w32.h (utimbuf) [_MSC_VER]: Don't define.
+       (snprintf) [_MSC_VER]: Redirect to _snprintf.
+       (strtoll) [_MSC_VER]: Redirect to _strtoi64.
+       (malloc, free, realloc, calloc): Redirect to e_* only when
+       compiling Emacs.
+       * lisp.h (GCTYPEBITS): Move before first use.
+       (ALIGN_GCTYPEBITS) [_MSC_VER]: Define.
+       (DECL_ALIGN) [_MSC_VER]: Use it, as MSVC doesn't like bit ops in
+       this macro definition.
+       * s/ms-w32.h (tzname): Redirect to _tzname for all values of
+       _MSC_VER.
+ 2011-11-27  Jan Djärv  <jan.h.d@swipnet.se>
+       * gtkutil.c (xg_create_frame_widgets):
+       Call gtk_window_set_has_resize_grip (FALSE) if that function is
+       present with Gtk+ 2.0.
+ 2011-11-26  Paul Eggert  <eggert@cs.ucla.edu>
+       * fileio.c (Finsert_file_contents): Undo previous change; see
+       <http://lists.gnu.org/archive/html/emacs-diffs/2011-11/msg00265.html>.
+ 2011-11-26  Paul Eggert  <eggert@cs.ucla.edu>
+       Rename locals to avoid shadowing.
+       * fileio.c (Finsert_file_contents):
+       Rename inner 'gcpro1' to 'inner_gcpro1' to avoid shadowing.
+       * process.c (wait_reading_process_output):
+       Rename inner 'proc' to 'p' to avoid shadowing.
+       Indent for consistency with usual Emacs style.
+ 2011-11-25  Eli Zaretskii  <eliz@gnu.org>
+       * xdisp.c (redisplay_window): If cursor row is not fully visible
+       after recentering, and scroll-conservatively is set to a large
+       number, scroll window by a few more lines to make the cursor fully
+       visible and out of scroll-margin.  (Bug#10105)
+       (start_display): Don't move to the next line if the display should
+       start at a newline that is part of a display vector or an overlay
+       string.  (Bug#10119)
+ 2011-11-24  Juri Linkov  <juri@jurta.org>
+       * image.c (imagemagick_load_image): Move `MagickSetResolution' down
+       after the `MagickPingImage' call.  (Bug#10112)
+ 2011-11-23  Chong Yidong  <cyd@gnu.org>
+       * window.c (Fcoordinates_in_window_p): Accept only live windows.
+ 2011-11-23  Martin Rudalics  <rudalics@gmx.at>
+       * buffer.c (Fkill_buffer): Run replace_buffer_in_windows before
+       making another buffer current.  (Bug#10114)
+ 2011-11-23  Glenn Morris  <rgm@gnu.org>
+       * font.c (font_find_for_lface) [HAVE_NS]: Ignore case.  (Bug#2526)
+ 2011-11-23  Chong Yidong  <cyd@gnu.org>
+       * xdisp.c (compute_stop_pos): Check validity of end_charpos before
+       using it (Bug#5984).
+ 2011-11-22  Eli Zaretskii  <eliz@gnu.org>
+       * dispnew.c (adjust_glyph_matrix): Don't verify hash code of mode-
+       and header-lines, as they don't have one computed for them.
+       (Bug#10098)
+       * .gdbinit (prow): Make displayed values more self-explaining.
+       Add row's hash code.
+ 2011-11-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * process.c (wait_reading_process_output): Fix asynchrounous
+       GnuTLS socket handling on some versions of the GnuTLS library.
+       (wait_reading_process_output): Add comment and URL.
+ 2011-11-21  Jan Djärv  <jan.h.d@swipnet.se>
+       * xterm.c (x_clear_frame): Reinstate the XClearWindow call.
+ 2011-11-21  Chong Yidong  <cyd@gnu.org>
+       * window.c (Fnext_window, Fprevious_window): Doc fix.
+ 2011-11-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * window.c (get_phys_cursor_glyph): Fix Lisp_Object/int mixup.
+ 2011-11-20  Juanma Barranquero  <lekktu@gmail.com>
+       * nsfont.m (syms_of_nsfont) <ns-reg-to-script>: Fix typo.
+ 2011-11-20  Martin Rudalics  <rudalics@gmx.at>
+       * window.c (Fset_window_combination_limit): Rename argument
+       STATUS to LIMIT.
+       (Vwindow_combination_limit): Remove "status" from doc-string.
+ 2011-11-20  Andreas Schwab  <schwab@linux-m68k.org>
+       * m/ibms390.h: Remove.
+       * m/ibms390x.h: Don't include "ibms390.h".
+ 2011-11-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * fileio.c (Finsert_file_contents): Add missing gcpro1 variable.
+       Suggested by Dmitry Antipov <dmantipov@yandex.ru>.
+ 2011-11-20  Juanma Barranquero  <lekktu@gmail.com>
+       * casetab.c (Fset_case_table):
+       * charset.c (Fcharset_after): Fix typos.
+ 2011-11-20  Paul Eggert  <eggert@cs.ucla.edu>
+       Standardize on VIRT_ADDR_VARIES behavior (Bug#10042).
+       Otherwise, valgrind does not work on some platforms.
+       Problem reported by Andreas Schwab in
+       <http://lists.gnu.org/archive/html/emacs-devel/2011-11/msg00081.html>.
+       * puresize.h (pure, PURE_P): Always behave as if VIRT_ADDR_VARIES
+       is set, removing the need for VIRT_ADDRESS_VARIES.
+       (PURE_P): Use a more-efficient implementation that needs just one
+       comparison, not two: on x86-64 with GCC 4.6.2, this cut down the
+       number of instructions from 6 (xorl, cmpq, jge, xorl, cmpq, setge)
+       to 4 (xorl, subq, cmpq, setbe).
+       * alloc.c (pure): Always extern now, since that's the
+       VIRT_ADDR_VARIES behavior.
+       (PURE_POINTER_P): Use a single comparison, not two, for
+       consistency with the new puresize.h.
+       * lisp.h (PNTR_COMPARISON_TYPE): Remove; no longer needed.
+       * m/ibms390.h, m/intel386.h, m/template.h, s/cygwin.h, s/hpux10-20.h:
+       Remove VIRT_ADDR_VARIES no longer needed.
+ 2011-11-19  Eli Zaretskii  <eliz@gnu.org>
+       * xdisp.c (x_write_glyphs, draw_phys_cursor_glyph)
+       (erase_phys_cursor, update_window_cursor, show_mouse_face)
+       (cursor_in_mouse_face_p): If the cursor position is out of bounds,
+       behave as if the cursor position were at the window margin.
+       * window.c (get_phys_cursor_glyph): If the window is hscrolled,
+       and the cursor position is out of bounds, behave as if the cursor
+       position were at the window margin.  (Bug#10075)
+ 2011-11-18  Chong Yidong  <cyd@gnu.org>
+       * window.c (Fwindow_combination_limit): Make first argument
+       non-optional, since it is meaningless for live windows like the
+       selected window.
  
  2011-11-18  Dmitry Antipov  <dmantipov@yandex.ru>
  
diff --cc src/alloc.c
Simple merge
diff --cc src/bidi.c
Simple merge
diff --cc src/buffer.c
Simple merge
diff --cc src/buffer.h
Simple merge
diff --cc src/callint.c
Simple merge
diff --cc src/casetab.c
Simple merge
diff --cc src/ccl.c
Simple merge
diff --cc src/character.c
@@@ -670,14 -669,14 +670,14 @@@ str_as_multibyte (unsigned char *str, p
  }
  
  /* Parse unibyte string at STR of LEN bytes, and return the number of
-    bytes it may ocupy when converted to multibyte string by
+    bytes it may occupy when converted to multibyte string by
     `str_to_multibyte'.  */
  
 -EMACS_INT
 -count_size_as_multibyte (const unsigned char *str, EMACS_INT len)
 +ptrdiff_t
 +count_size_as_multibyte (const unsigned char *str, ptrdiff_t len)
  {
    const unsigned char *endp = str + len;
 -  EMACS_INT bytes;
 +  ptrdiff_t bytes;
  
    for (bytes = 0; str < endp; str++)
      {
diff --cc src/character.h
Simple merge
diff --cc src/charset.c
Simple merge
diff --cc src/chartab.c
Simple merge
diff --cc src/coding.c
@@@ -847,18 -847,18 +847,18 @@@ static int encode_coding_ccl (struct co
  static void decode_coding_raw_text (struct coding_system *);
  static int encode_coding_raw_text (struct coding_system *);
  
- static void coding_set_source (struct coding_system *);
- static void coding_set_destination (struct coding_system *);
 -static EMACS_INT coding_set_source (struct coding_system *);
 -static EMACS_INT coding_set_destination (struct coding_system *);
 -static void coding_alloc_by_realloc (struct coding_system *, EMACS_INT);
++static ptrdiff_t coding_set_source (struct coding_system *);
++static ptrdiff_t coding_set_destination (struct coding_system *);
 +static void coding_alloc_by_realloc (struct coding_system *, ptrdiff_t);
  static void coding_alloc_by_making_gap (struct coding_system *,
 -                                        EMACS_INT, EMACS_INT);
 +                                        ptrdiff_t, ptrdiff_t);
  static unsigned char *alloc_destination (struct coding_system *,
 -                                         EMACS_INT, unsigned char *);
 +                                         ptrdiff_t, unsigned char *);
  static void setup_iso_safe_charsets (Lisp_Object);
- static unsigned char *encode_designation_at_bol (struct coding_system *,
-                                                  int *, unsigned char *);
+ static int encode_designation_at_bol (struct coding_system *,
+                                     int *, int *, unsigned char *);
  static int detect_eol (const unsigned char *,
 -                       EMACS_INT, enum coding_category);
 +                       ptrdiff_t, enum coding_category);
  static Lisp_Object adjust_coding_eol_type (struct coding_system *, int);
  static void decode_eol (struct coding_system *);
  static Lisp_Object get_translation_table (Lisp_Object, int, int *);
@@@ -915,27 -915,68 +915,68 @@@ record_conversion_result (struct coding
      }
  }
  
- /* This wrapper macro is used to preserve validity of pointers into
-    buffer text across calls to decode_char, which could cause
-    relocation of buffers if it loads a charset map, because loading a
-    charset map allocates large structures.  */
+ /* These wrapper macros are used to preserve validity of pointers into
+    buffer text across calls to decode_char, encode_char, etc, which
+    could cause relocation of buffers if it loads a charset map,
+    because loading a charset map allocates large structures.  */
  #define CODING_DECODE_CHAR(coding, src, src_base, src_end, charset, code, c) \
    do {                                                                             \
 -    EMACS_INT offset;                                                      \
++    ptrdiff_t offset;                                                      \
+                                                                            \
      charset_map_loaded = 0;                                                \
      c = DECODE_CHAR (charset, code);                                       \
-     if (charset_map_loaded)                                                \
+     if (charset_map_loaded                                                 \
+       && (offset = coding_set_source (coding)))                            \
        {                                                                            \
-       const unsigned char *orig = coding->source;                          \
-       ptrdiff_t offset;                                                    \
-                                                                            \
-       coding_set_source (coding);                                          \
-       offset = coding->source - orig;                                      \
        src += offset;                                                       \
        src_base += offset;                                                  \
        src_end += offset;                                                   \
        }                                                                            \
    } while (0)
  
 -    EMACS_INT offset;                                                 \
+ #define CODING_ENCODE_CHAR(coding, dst, dst_end, charset, c, code)    \
+   do {                                                                        \
 -    EMACS_INT offset;                                                 \
++    ptrdiff_t offset;                                                 \
+                                                                       \
+     charset_map_loaded = 0;                                           \
+     code = ENCODE_CHAR (charset, c);                                  \
+     if (charset_map_loaded                                            \
+       && (offset = coding_set_destination (coding)))                  \
+       {                                                                       \
+       dst += offset;                                                  \
+       dst_end += offset;                                              \
+       }                                                                       \
+   } while (0)
+ #define CODING_CHAR_CHARSET(coding, dst, dst_end, c, charset_list, code_return, charset) \
+   do {                                                                        \
 -    EMACS_INT offset;                                                 \
++    ptrdiff_t offset;                                                 \
+                                                                       \
+     charset_map_loaded = 0;                                           \
+     charset = char_charset (c, charset_list, code_return);            \
+     if (charset_map_loaded                                            \
+       && (offset = coding_set_destination (coding)))                  \
+       {                                                                       \
+       dst += offset;                                                  \
+       dst_end += offset;                                              \
+       }                                                                       \
+   } while (0)
+ #define CODING_CHAR_CHARSET_P(coding, dst, dst_end, c, charset, result)       \
+   do {                                                                        \
++    ptrdiff_t offset;                                                 \
+                                                                       \
+     charset_map_loaded = 0;                                           \
+     result = CHAR_CHARSET_P (c, charset);                             \
+     if (charset_map_loaded                                            \
+       && (offset = coding_set_destination (coding)))                  \
+       {                                                                       \
+       dst += offset;                                                  \
+       dst_end += offset;                                              \
+       }                                                                       \
+   } while (0)
  
  /* If there are at least BYTES length of room at dst, allocate memory
     for coding->destination and update dst and dst_end.  We don't have
         | ((p)[-1] & 0x3F))))
  
  
- static void
+ /* Update coding->source from coding->src_object, and return how many
+    bytes coding->source was changed.  */
 -static EMACS_INT
++static ptrdiff_t
  coding_set_source (struct coding_system *coding)
  {
+   const unsigned char *orig = coding->source;
    if (BUFFERP (coding->src_object))
      {
        struct buffer *buf = XBUFFER (coding->src_object);
        /* Otherwise, the source is C string and is never relocated
         automatically.  Thus we don't have to update anything.  */
      }
+   return coding->source - orig;
  }
  
- static void
+ /* Update coding->destination from coding->dst_object, and return how
+    many bytes coding->destination was changed.  */
 -static EMACS_INT
++static ptrdiff_t
  coding_set_destination (struct coding_system *coding)
  {
+   const unsigned char *orig = coding->destination;
    if (BUFFERP (coding->dst_object))
      {
        if (BUFFERP (coding->src_object) && coding->src_pos < 0)
@@@ -4185,7 -4245,8 +4245,8 @@@ decode_coding_iso_2022 (struct coding_s
  
  #define ENCODE_ISO_CHARACTER(charset, c)                                 \
    do {                                                                           \
-     unsigned code = ENCODE_CHAR ((charset), (c));                        \
 -    int code;                                                            \
++    unsigned code;                                                       \
+     CODING_ENCODE_CHAR (coding, dst, dst_end, (charset), (c), code);     \
                                                                           \
      if (CHARSET_DIMENSION (charset) == 1)                                \
        ENCODE_ISO_CHARACTER_DIMENSION1 ((charset), code);                 \
@@@ -4378,13 -4443,26 +4443,26 @@@ encode_coding_iso_2022 (struct coding_s
  
        if (bol_designation)
        {
-         unsigned char *dst_prev = dst;
          /* We have to produce designation sequences if any now.  */
-         dst = encode_designation_at_bol (coding, charbuf, dst);
-         bol_designation = 0;
+         unsigned char desig_buf[16];
+         int nbytes;
 -        EMACS_INT offset;
++        ptrdiff_t offset;
+         charset_map_loaded = 0;
+         nbytes = encode_designation_at_bol (coding, charbuf, charbuf_end,
+                                             desig_buf);
+         if (charset_map_loaded
+             && (offset = coding_set_destination (coding)))
+           {
+             dst += offset;
+             dst_end += offset;
+           }
+         memcpy (dst, desig_buf, nbytes);
+         dst += nbytes;
          /* We are sure that designation sequences are all ASCII bytes.  */
-         produced_chars += dst - dst_prev;
+         produced_chars += nbytes;
+         bol_designation = 0;
+         ASSURE_DESTINATION (safe_room);
        }
  
        c = *charbuf++;
diff --cc src/coding.h
@@@ -457,8 -457,8 +457,8 @@@ struct coding_syste
    /* Number of error source data found in a decoding routine.  */
    int errors;
  
-   /* Store the positions of error source data. */
+   /* Store the positions of error source data.  */
 -  EMACS_INT *error_positions;
 +  ptrdiff_t *error_positions;
  
    /* Finish status of code conversion.  */
    enum coding_result_code result;
diff --cc src/data.c
Simple merge
diff --cc src/dbusbind.c
Simple merge
diff --cc src/dired.c
@@@ -226,10 -226,10 +226,10 @@@ directory_files_internal (Lisp_Object d
  
        if (DIRENTRY_NONEMPTY (dp))
        {
 -        int len;
 +        ptrdiff_t len;
          int wanted = 0;
          Lisp_Object name, finalname;
-         struct gcpro inner_gcpro1, inner_gcpro2;
+         struct gcpro gcpro1, gcpro2;
  
          len = NAMLEN (dp);
          name = finalname = make_unibyte_string (dp->d_name, len);
Simple merge
diff --cc src/dispnew.c
Simple merge
diff --cc src/emacs.c
Simple merge
diff --cc src/eval.c
Simple merge
diff --cc src/fileio.c
@@@ -3677,18 -3674,19 +3677,19 @@@ variable `last-coding-system-used' to t
       in a more optimized way.  */
    if (!NILP (replace) && ! replace_handled && BEGV < ZV)
      {
 -      EMACS_INT same_at_start = BEGV_BYTE;
 -      EMACS_INT same_at_end = ZV_BYTE;
 -      EMACS_INT same_at_start_charpos;
 -      EMACS_INT inserted_chars;
 -      EMACS_INT overlap;
 -      EMACS_INT bufpos;
 +      ptrdiff_t same_at_start = BEGV_BYTE;
 +      ptrdiff_t same_at_end = ZV_BYTE;
 +      ptrdiff_t same_at_start_charpos;
 +      ptrdiff_t inserted_chars;
 +      ptrdiff_t overlap;
 +      ptrdiff_t bufpos;
        unsigned char *decoded;
 -      EMACS_INT temp;
 -      EMACS_INT this = 0;
 -      int this_count = SPECPDL_INDEX ();
 +      ptrdiff_t temp;
 +      ptrdiff_t this = 0;
 +      ptrdiff_t this_count = SPECPDL_INDEX ();
        int multibyte = ! NILP (BVAR (current_buffer, enable_multibyte_characters));
        Lisp_Object conversion_buffer;
+       struct gcpro gcpro1;
  
        conversion_buffer = code_conversion_save (1, multibyte);
  
        {
          /* We read one bunch by one (READ_BUF_SIZE bytes) to allow
             quitting while reading a huge while.  */
-         /* try is reserved in some compilers (Microsoft C) */
+         /* `try'' is reserved in some compilers (Microsoft C).  */
 -        EMACS_INT trytry = min (total - how_much,
 -                                READ_BUF_SIZE - unprocessed);
 +        int trytry = min (total - how_much, READ_BUF_SIZE - unprocessed);
  
          /* Allow quitting out of the actual I/O.  */
          immediate_quit = 1;
diff --cc src/fns.c
Simple merge
diff --cc src/font.c
Simple merge
diff --cc src/font.h
Simple merge
diff --cc src/fontset.c
Simple merge
diff --cc src/frame.c
Simple merge
diff --cc src/fringe.c
Simple merge
diff --cc src/ftfont.c
Simple merge
diff --cc src/gtkutil.c
Simple merge
diff --cc src/image.c
Simple merge
diff --cc src/intervals.c
Simple merge
diff --cc src/keyboard.c
@@@ -2996,10 -2998,9 +2997,10 @@@ read_char (int commandflag, ptrdiff_t n
        && ' ' <= XINT (c) && XINT (c) < 256 && XINT (c) != 127)
      {
        Lisp_Object keys;
 -      int key_count, key_count_reset;
 +      ptrdiff_t key_count;
 +      int key_count_reset;
-       struct gcpro inner_gcpro1;
+       struct gcpro gcpro1;
 -      int count = SPECPDL_INDEX ();
 +      ptrdiff_t count = SPECPDL_INDEX ();
  
        /* Save the echo status.  */
        int saved_immediate_echo = current_kboard->immediate_echo;
diff --cc src/lisp.h
Simple merge
diff --cc src/lread.c
@@@ -1922,8 -1917,8 +1922,8 @@@ which is the input stream for reading c
  This function does not move point.  */)
    (Lisp_Object start, Lisp_Object end, Lisp_Object printflag, Lisp_Object read_function)
  {
-   /* FIXME: Do the eval-sexp-add-defvars danse!  */
+   /* FIXME: Do the eval-sexp-add-defvars dance!  */
 -  int count = SPECPDL_INDEX ();
 +  ptrdiff_t count = SPECPDL_INDEX ();
    Lisp_Object tem, cbuf;
  
    cbuf = Fcurrent_buffer ();
diff --cc src/minibuf.c
Simple merge
diff --cc src/nsfns.m
Simple merge
diff --cc src/nsfont.m
Simple merge
diff --cc src/print.c
Simple merge
diff --cc src/process.c
Simple merge
diff --cc src/puresize.h
Simple merge
diff --cc src/search.c
@@@ -83,23 -83,22 +83,22 @@@ static struct re_registers search_regs
     Qnil if no searching has been done yet.  */
  static Lisp_Object last_thing_searched;
  
- /* error condition signaled when regexp compile_pattern fails */
+ /* Error condition signaled when regexp compile_pattern fails.  */
  static Lisp_Object Qinvalid_regexp;
  
- /* Error condition used for failing searches */
+ /* Error condition used for failing searches */
  static Lisp_Object Qsearch_failed;
  
 -static void set_search_regs (EMACS_INT, EMACS_INT);
 +static void set_search_regs (ptrdiff_t, ptrdiff_t);
  static void save_search_regs (void);
 -static EMACS_INT simple_search (EMACS_INT, unsigned char *, EMACS_INT,
 -                              EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT,
 -                                EMACS_INT, EMACS_INT);
 -static EMACS_INT boyer_moore (EMACS_INT, unsigned char *, EMACS_INT,
 -                              Lisp_Object, Lisp_Object, EMACS_INT,
 -                              EMACS_INT, int);
 -static EMACS_INT search_buffer (Lisp_Object, EMACS_INT, EMACS_INT,
 -                                EMACS_INT, EMACS_INT, EMACS_INT, int,
 +static EMACS_INT simple_search (EMACS_INT, unsigned char *, ptrdiff_t,
 +                              ptrdiff_t, Lisp_Object, ptrdiff_t, ptrdiff_t,
 +                                ptrdiff_t, ptrdiff_t);
 +static EMACS_INT boyer_moore (EMACS_INT, unsigned char *, ptrdiff_t,
 +                              Lisp_Object, Lisp_Object, ptrdiff_t,
 +                              ptrdiff_t, int);
 +static EMACS_INT search_buffer (Lisp_Object, ptrdiff_t, ptrdiff_t,
 +                                ptrdiff_t, ptrdiff_t, EMACS_INT, int,
                                  Lisp_Object, Lisp_Object, int);
  static void matcher_overflow (void) NO_RETURN;
  
@@@ -2079,16 -2077,19 +2078,19 @@@ set_search_regs (ptrdiff_t beg_byte, pt
    XSETBUFFER (last_thing_searched, current_buffer);
  }
  \f
- /* Given STRING, a string of words separated by word delimiters,
-    compute a regexp that matches those exact words separated by
-    arbitrary punctuation.  If LAX is nonzero, the end of the string
-    need not match a word boundary unless it ends in whitespace.  */
- static Lisp_Object
- wordify (Lisp_Object string, int lax)
+ DEFUN ("word-search-regexp", Fword_search_regexp, Sword_search_regexp, 1, 2, 0,
+        doc: /* Return a regexp which matches words, ignoring punctuation.
+ Given STRING, a string of words separated by word delimiters,
+ compute a regexp that matches those exact words separated by
+ arbitrary punctuation.  If LAX is non-nil, the end of the string
+ need not match a word boundary unless it ends in whitespace.
+ Used in `word-search-forward', `word-search-backward',
+ `word-search-forward-lax', `word-search-backward-lax'.  */)
+   (Lisp_Object string, Lisp_Object lax)
  {
    register unsigned char *o;
 -  register EMACS_INT i, i_byte, len, punct_count = 0, word_count = 0;
 +  register ptrdiff_t i, i_byte, len, punct_count = 0, word_count = 0;
    Lisp_Object val;
    int prev_c = 0;
    EMACS_INT adjust;
        return empty_unibyte_string;
      }
  
 -  adjust = - punct_count + 5 * (word_count - 1)
 +  adjust = word_count - 1;
 +  if (TYPE_MAXIMUM (EMACS_INT) / 5 < adjust)
 +    memory_full (SIZE_MAX);
 +  adjust = - punct_count + 5 * adjust
-     + ((lax && !whitespace_at_end) ? 2 : 4);
+     + ((!NILP (lax) && !whitespace_at_end) ? 2 : 4);
    if (STRING_MULTIBYTE (string))
 -    val = make_uninit_multibyte_string (len + adjust,
 -                                      SBYTES (string)
 -                                      + adjust);
 +    {
 +      if (INT_ADD_OVERFLOW (SBYTES (string), adjust))
 +      memory_full (SIZE_MAX);
 +      val = make_uninit_multibyte_string (len + adjust,
 +                                        SBYTES (string) + adjust);
 +    }
    else
 -    val = make_uninit_string (len + adjust);
 +    {
 +      if (INT_ADD_OVERFLOW (len, adjust))
 +      memory_full (SIZE_MAX);
 +      val = make_uninit_string (len + adjust);
 +    }
  
    o = SDATA (val);
    *o++ = '\\';
diff --cc src/sound.c
Simple merge
diff --cc src/sysdep.c
Simple merge
diff --cc src/term.c
Simple merge
diff --cc src/textprop.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
@@@ -3167,11 -3170,8 +3173,8 @@@ compute_stop_pos (struct it *it
  {
    register INTERVAL iv, next_iv;
    Lisp_Object object, limit, position;
 -  EMACS_INT charpos, bytepos;
 +  ptrdiff_t charpos, bytepos;
  
-   /* If nowhere else, stop at the end.  */
-   it->stop_charpos = it->end_charpos;
    if (STRINGP (it->string))
      {
        /* Strings are usually short, so don't limit the search for
      }
    else
      {
 -      EMACS_INT pos;
 +      ptrdiff_t pos;
  
+       /* If end_charpos is out of range for some reason, such as a
+        misbehaving display function, rationalize it (Bug#5984).  */
+       if (it->end_charpos > ZV)
+       it->end_charpos = ZV;
+       it->stop_charpos = it->end_charpos;
        /* If next overlay change is in front of the current stop pos
         (which is IT->end_charpos), stop there.  Note: value of
         next_overlay_change is point-max if no overlay change
@@@ -4085,24 -4092,22 +4095,22 @@@ handle_invisible_prop (struct it *it
          /* The position newpos is now either ZV or on visible text.  */
          if (it->bidi_p && newpos < ZV)
            {
 -            EMACS_INT bpos = CHAR_TO_BYTE (newpos);
 +            ptrdiff_t bpos = CHAR_TO_BYTE (newpos);
-             if (FETCH_BYTE (bpos) == '\n'
-                 || (newpos > BEGV && FETCH_BYTE (bpos - 1) == '\n'))
+             int on_newline = FETCH_BYTE (bpos) == '\n';
+             int after_newline =
+               newpos <= BEGV || FETCH_BYTE (bpos - 1) == '\n';
+             /* If the invisible text ends on a newline or on a
+                character after a newline, we can avoid the costly,
+                character by character, bidi iteration to NEWPOS, and
+                instead simply reseat the iterator there.  That's
+                because all bidi reordering information is tossed at
+                the newline.  This is a big win for modes that hide
+                complete lines, like Outline, Org, etc.  */
+             if (on_newline || after_newline)
                {
-                 /* If the invisible text ends on a newline or the
-                    character after a newline, we can avoid the
-                    costly, character by character, bidi iteration to
-                    newpos, and instead simply reseat the iterator
-                    there.  That's because all bidi reordering
-                    information is tossed at the newline.  This is a
-                    big win for modes that hide complete lines, like
-                    Outline, Org, etc.  (Implementation note: the
-                    call to reseat_1 is necessary, because it signals
-                    to the bidi iterator that it needs to reinit its
-                    internal information when the next element for
-                    display is requested.  */
                  struct text_pos tpos;
+                 bidi_dir_t pdir = it->bidi_it.paragraph_dir;
  
                  SET_TEXT_POS (tpos, newpos, bpos);
                  reseat_1 (it, tpos, 0);
@@@ -15038,10 -15053,10 +15060,10 @@@ redisplay_window (Lisp_Object window, i
    int current_matrix_up_to_date_p = 0;
    int used_current_matrix_p = 0;
    /* This is less strict than current_matrix_up_to_date_p.
-      It indictes that the buffer contents and narrowing are unchanged.  */
+      It indicates that the buffer contents and narrowing are unchanged.  */
    int buffer_unchanged_p = 0;
    int temp_scroll_step = 0;
 -  int count = SPECPDL_INDEX ();
 +  ptrdiff_t count = SPECPDL_INDEX ();
    int rc;
    int centering_position = -1;
    int last_line_misfit = 0;
        scroll_margin > 0
        ? min (scroll_margin, WINDOW_TOTAL_LINES (w) / 4)
        : 0;
 -      EMACS_INT margin_pos = CHARPOS (startp);
 +      ptrdiff_t margin_pos = CHARPOS (startp);
-       int scrolling_up;
        Lisp_Object aggressive;
+       int scrolling_up;
  
        /* If there is a scroll margin at the top of the window, find
         its character position.  */
@@@ -18856,11 -18887,12 +18894,12 @@@ display_line (struct it *it
  #define RECORD_MAX_MIN_POS(IT)                                        \
    do                                                          \
      {                                                         \
-       int composition_p = (IT)->what == IT_COMPOSITION;               \
+       int composition_p = !STRINGP ((IT)->string)             \
+       && ((IT)->what == IT_COMPOSITION);                      \
 -      EMACS_INT current_pos =                                 \
 +      ptrdiff_t current_pos =                                 \
        composition_p ? (IT)->cmp_it.charpos                    \
                      : IT_CHARPOS (*(IT));                     \
 -      EMACS_INT current_bpos =                                        \
 +      ptrdiff_t current_bpos =                                        \
        composition_p ? CHAR_TO_BYTE (current_pos)              \
                      : IT_BYTEPOS (*(IT));                     \
        if (current_pos < min_pos)                              \
diff --cc src/xfaces.c
Simple merge
diff --cc src/xfns.c
Simple merge
diff --cc src/xmenu.c
Simple merge
diff --cc src/xselect.c
Simple merge
diff --cc src/xterm.c
Simple merge
diff --cc src/xterm.h
Simple merge