1. 09 May, 2011 1 commit
    • Eli Zaretskii's avatar
      Backport revisions... · 14fe7b53
      Eli Zaretskii authored
      Backport revisions 2011-04-24T05:30:24Z!eggert@cs.ucla.edu..2011-04-25T19:40:22Z!eggert@cs.ucla.edu (inclusive) from trunk (bug#8623)
      
      	The next log entry shows the actual changes by Paul Eggert.
      
       Fix a problem with aliasing and vector headers.
       GCC 4.6.0 optimizes based on type-based alias analysis.  For
       example, if b is of type struct buffer * and v of type struct
       Lisp_Vector *, then gcc -O2 was incorrectly assuming that &b->size
       != &v->size, and therefore "v->size = 1; b->size = 2; return
       v->size;" must therefore return 1.  This assumption is incorrect
       for Emacs, since it type-puns struct Lisp_Vector * with many other
       types.  To fix this problem, this patch adds a new type struct
       vector_header that documents the constraints on layout of vectors
       and pseudovectors, and helps optimizing compilers not get fooled
       by Emacs's type punning.  It also adds the macros XSETTYPED_PVECTYPE
       XSETTYPED_PSEUDOVECTOR, TYPED_PSEUDOVECTORP, for similar reasons.
       src/lisp.h (XVECTOR_SIZE): New convenience macro.  All previous uses of
       XVECTOR (foo)->size replaced to use this macro, to avoid the hassle
       of writing XVECTOR (foo)->header.size.
       src/lisp.h: Say "vectorlike header" rather than "vector header.
       (struct vectorlike_header): Rename from struct vector_header.
       (XVECTORLIKE_HEADER_SIZE): Renamed from XVECTOR_HEADER_SIZE.
       All uses changed.
       (XVECTOR_HEADER_SIZE): New macro, for use in XSETPSEUDOVECTOR.
       (XSETTYPED_PVECTYPE): New macro, specifying the name of the size
       member.
       (XSETPVECTYPE): Rewrite in terms of new macro.
       (XSETPVECTYPESIZE): New macro, specifying both type and size.
       This is a bit clearer, and further avoids the possibility of
       undesirable aliasing.
       (XSETTYPED_PSEUDOVECTOR): New macro, specifying the size.
       (XSETPSEUDOVECTOR): Rewrite in terms of XSETTYPED_PSEUDOVECTOR
       and XVECTOR_HEADER_SIZE.
       (XSETSUBR): Rewrite in terms of XSETTYPED_PSEUDOVECTOR and XSIZE,
       since Lisp_Subr is a special case (no "next" field).
       (ASIZE): Rewrite in terms of XVECTOR_SIZE.
       (struct vector_header): New type.
       (TYPED_PSEUDOVECTORP): New macro, also specifying the C type of the
       object, to help avoid aliasing.
       (PSEUDOVECTORP): Rewrite in terms of TYPED_PSEUDOVECTORP.
       (SUBRP): Likewise, since Lisp_Subr is a special case.
       src/lisp.h (struct Lisp_Vector, struct Lisp_Char_Table):
       (struct Lisp_Sub_Char_Table, struct Lisp_Bool_Vector):
       (struct Lisp_Hash_Table): Combine first two members into a single
       struct vector_header member.  All uses of "size" and "next" members
       changed to be "header.size" and "header.next".
       src/buffer.h (struct buffer): Likewise.
       src/font.h (struct font_spec, struct font_entity, struct font): Likewise.
       src/frame.h (struct frame): Likewise.
       src/process.h (struct Lisp_Process): Likewise.
       src/termhooks.h (struct terminal): Likewise.
       src/window.c (struct save_window_data, struct saved_window): Likewise.
       src/window.h (struct window): Likewise.
       src/alloc.c (allocate_buffer, Fmake_bool_vector, allocate_pseudovector):
       Use XSETPVECTYPESIZE, not XSETPVECTYPE, to avoid aliasing problems.
       src/buffer.c (init_buffer_once): Likewise.
       src/lread.c (defsubr): Use XSETTYPED_PVECTYPE, since Lisp_Subr is a
       special case.
       src/process.c (Fformat_network_address): Use local var for size,
       for brevity.
       src/fns.c (vector): Remove; this old hack is no longer needed.
       src/bytecode.c (exec_byte_code): Don't use XVECTOR before CHECK_VECTOR.
      14fe7b53
  2. 29 Apr, 2011 1 commit
  3. 26 Apr, 2011 1 commit
  4. 18 Apr, 2011 1 commit
  5. 13 Apr, 2011 1 commit
  6. 10 Apr, 2011 2 commits
  7. 09 Apr, 2011 1 commit
  8. 08 Apr, 2011 3 commits
  9. 19 Mar, 2011 2 commits
    • Christoph Scholtes's avatar
      4e19a977
    • Chong Yidong's avatar
      Backport fix for Bug#8219 from trunk. · 20f56955
      Chong Yidong authored
      * buffer.h (BUF_BEGV, BUF_BEGV_BYTE, BUF_ZV, BUF_ZV_BYTE, BUF_PT)
      (BUF_PT_BYTE): Rewrite to handle indirect buffers (Bug#8219).
      These macros can no longer be used for assignment.
      
      * buffer.c (Fget_buffer_create, Fmake_indirect_buffer): Assign
      struct members directly, instead of using BUF_BEGV etc.
      (record_buffer_markers, fetch_buffer_markers): New functions for
      recording and fetching special buffer markers.
      (set_buffer_internal_1, set_buffer_temp): Use them.
      
      * lread.c (unreadchar): Use SET_BUF_PT_BOTH.
      
      * insdel.c (adjust_point): Use SET_BUF_PT_BOTH.
      
      * intervals.c (temp_set_point_both): Use SET_BUF_PT_BOTH.
      (get_local_map): Use SET_BUF_BEGV_BOTH and SET_BUF_ZV_BOTH.
      
      * xdisp.c (hscroll_window_tree):
      (reconsider_clip_changes): Use PT instead of BUF_PT.
      20f56955
  10. 17 Mar, 2011 1 commit
  11. 11 Mar, 2011 3 commits
  12. 07 Mar, 2011 1 commit
  13. 01 Mar, 2011 1 commit
  14. 23 Feb, 2011 2 commits
  15. 22 Feb, 2011 1 commit
  16. 19 Feb, 2011 1 commit
  17. 17 Feb, 2011 1 commit
  18. 13 Feb, 2011 1 commit
  19. 12 Feb, 2011 2 commits
  20. 09 Feb, 2011 1 commit
  21. 08 Feb, 2011 1 commit
  22. 03 Feb, 2011 1 commit
  23. 02 Feb, 2011 2 commits
  24. 01 Feb, 2011 1 commit
  25. 29 Jan, 2011 2 commits
  26. 28 Jan, 2011 1 commit
  27. 27 Jan, 2011 1 commit
  28. 26 Jan, 2011 1 commit
  29. 24 Jan, 2011 1 commit
  30. 23 Jan, 2011 1 commit