diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/buffer.h | 2 | ||||
-rw-r--r-- | src/font.h | 6 | ||||
-rw-r--r-- | src/frame.h | 2 | ||||
-rw-r--r-- | src/lisp.h | 28 | ||||
-rw-r--r-- | src/process.h | 2 | ||||
-rw-r--r-- | src/termhooks.h | 2 | ||||
-rw-r--r-- | src/thread.h | 6 | ||||
-rw-r--r-- | src/w32term.h | 2 | ||||
-rw-r--r-- | src/window.c | 8 | ||||
-rw-r--r-- | src/window.h | 2 | ||||
-rw-r--r-- | src/xterm.h | 2 | ||||
-rw-r--r-- | src/xwidget.h | 4 |
12 files changed, 33 insertions, 33 deletions
diff --git a/src/buffer.h b/src/buffer.h index ac7c5a54679..46c7c6e5ad6 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -504,7 +504,7 @@ struct buffer_text struct buffer { - struct vectorlike_header header; + union vectorlike_header header; /* The name of this buffer. */ Lisp_Object name_; diff --git a/src/font.h b/src/font.h index 8f2e27f0edd..43d6f67e3e9 100644 --- a/src/font.h +++ b/src/font.h @@ -244,7 +244,7 @@ enum font_property_index struct font_spec { - struct vectorlike_header header; + union vectorlike_header header; Lisp_Object props[FONT_SPEC_MAX]; }; @@ -252,7 +252,7 @@ struct font_spec struct font_entity { - struct vectorlike_header header; + union vectorlike_header header; Lisp_Object props[FONT_ENTITY_MAX]; }; @@ -265,7 +265,7 @@ struct font_entity struct font { - struct vectorlike_header header; + union vectorlike_header header; /* All Lisp_Object components must come first. That ensures they are all aligned normally. */ diff --git a/src/frame.h b/src/frame.h index e610fc768d3..a3b77636435 100644 --- a/src/frame.h +++ b/src/frame.h @@ -79,7 +79,7 @@ enum ns_appearance_type struct frame { - struct vectorlike_header header; + union vectorlike_header header; /* All Lisp_Object components must come first. That ensures they are all aligned normally. */ diff --git a/src/lisp.h b/src/lisp.h index 015346858b5..1d6fd5a4fe2 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -796,11 +796,11 @@ struct Lisp_Symbol /* Header of vector-like objects. This documents the layout constraints on vectors and pseudovectors (objects of PVEC_xxx subtype). It also prevents compilers from being fooled by Emacs's type punning: XSETPSEUDOVECTOR - and PSEUDOVECTORP cast their pointers to struct vectorlike_header *, + and PSEUDOVECTORP cast their pointers to union vectorlike_header *, because when two such pointers potentially alias, a compiler won't incorrectly reorder loads and stores to their size fields. See Bug#8546. */ -struct vectorlike_header +union vectorlike_header { /* The only field contains various pieces of information: - The MSB (ARRAY_MARK_FLAG) holds the gcmarkbit. @@ -1094,10 +1094,10 @@ INLINE bool | ((restsize) << PSEUDOVECTOR_SIZE_BITS) \ | (lispsize))) -/* The cast to struct vectorlike_header * avoids aliasing issues. */ +/* The cast to union vectorlike_header * avoids aliasing issues. */ #define XSETPSEUDOVECTOR(a, b, code) \ XSETTYPED_PSEUDOVECTOR (a, b, \ - (((struct vectorlike_header *) \ + (((union vectorlike_header *) \ XUNTAG (a, Lisp_Vectorlike)) \ ->size), \ code) @@ -1399,7 +1399,7 @@ STRING_SET_CHARS (Lisp_Object string, ptrdiff_t newsize) struct Lisp_Vector { - struct vectorlike_header header; + union vectorlike_header header; Lisp_Object contents[FLEXIBLE_ARRAY_MEMBER]; }; @@ -1456,7 +1456,7 @@ PSEUDOVECTOR_TYPE (struct Lisp_Vector *v) /* Can't be used with PVEC_NORMAL_VECTOR. */ INLINE bool -PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, enum pvec_type code) +PSEUDOVECTOR_TYPEP (union vectorlike_header *a, enum pvec_type code) { /* We don't use PSEUDOVECTOR_TYPE here so as to avoid a shift * operation when `code' is known. */ @@ -1472,8 +1472,8 @@ PSEUDOVECTORP (Lisp_Object a, int code) return false; else { - /* Converting to struct vectorlike_header * avoids aliasing issues. */ - struct vectorlike_header *h = XUNTAG (a, Lisp_Vectorlike); + /* Converting to union vectorlike_header * avoids aliasing issues. */ + union vectorlike_header *h = XUNTAG (a, Lisp_Vectorlike); return PSEUDOVECTOR_TYPEP (h, code); } } @@ -1484,7 +1484,7 @@ struct Lisp_Bool_Vector { /* HEADER.SIZE is the vector's size field. It doesn't have the real size, just the subtype information. */ - struct vectorlike_header header; + union vectorlike_header header; /* This is the size in bits. */ EMACS_INT size; /* The actual bits, packed into bytes. @@ -1697,7 +1697,7 @@ struct Lisp_Char_Table pseudovector type information. It holds the size, too. The size counts the defalt, parent, purpose, ascii, contents, and extras slots. */ - struct vectorlike_header header; + union vectorlike_header header; /* This holds a default value, which is used whenever the value for a specific character is nil. */ @@ -1739,7 +1739,7 @@ struct Lisp_Sub_Char_Table { /* HEADER.SIZE is the vector's size field, which also holds the pseudovector type information. It holds the size, too. */ - struct vectorlike_header header; + union vectorlike_header header; /* Depth of this sub char-table. It should be 1, 2, or 3. A sub char-table of depth 1 contains 16 elements, and each element @@ -1814,7 +1814,7 @@ CHAR_TABLE_SET (Lisp_Object ct, int idx, Lisp_Object val) struct Lisp_Subr { - struct vectorlike_header header; + union vectorlike_header header; union { Lisp_Object (*a0) (void); Lisp_Object (*a1) (Lisp_Object); @@ -2026,7 +2026,7 @@ struct hash_table_test struct Lisp_Hash_Table { /* This is for Lisp; the hash table code does not refer to it. */ - struct vectorlike_header header; + union vectorlike_header header; /* Nil if table is non-weak. Otherwise a symbol describing the weakness of the table. */ @@ -3929,7 +3929,7 @@ typedef emacs_value (*emacs_subr) (emacs_env *, ptrdiff_t, struct Lisp_Module_Function { - struct vectorlike_header header; + union vectorlike_header header; /* Fields traced by GC; these must come first. */ Lisp_Object documentation; diff --git a/src/process.h b/src/process.h index 5a044f669f2..5670f447365 100644 --- a/src/process.h +++ b/src/process.h @@ -41,7 +41,7 @@ enum { PROCESS_OPEN_FDS = 6 }; struct Lisp_Process { - struct vectorlike_header header; + union vectorlike_header header; /* Name of subprocess terminal. */ Lisp_Object tty_name; diff --git a/src/termhooks.h b/src/termhooks.h index dd6044aabd5..fe4e993c968 100644 --- a/src/termhooks.h +++ b/src/termhooks.h @@ -373,7 +373,7 @@ extern struct tty_display_info *gpm_tty; struct terminal { /* This is for Lisp; the terminal code does not refer to it. */ - struct vectorlike_header header; + union vectorlike_header header; /* Parameter alist of this terminal. */ Lisp_Object param_alist; diff --git a/src/thread.h b/src/thread.h index 19baafbf8a1..1845974bc28 100644 --- a/src/thread.h +++ b/src/thread.h @@ -35,7 +35,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ struct thread_state { - struct vectorlike_header header; + union vectorlike_header header; /* The buffer in which the last search was performed, or Qt if the last search was done in a string; @@ -230,7 +230,7 @@ typedef struct /* A mutex as a lisp object. */ struct Lisp_Mutex { - struct vectorlike_header header; + union vectorlike_header header; /* The name of the mutex, or nil. */ Lisp_Object name; @@ -261,7 +261,7 @@ XMUTEX (Lisp_Object a) /* A condition variable as a lisp object. */ struct Lisp_CondVar { - struct vectorlike_header header; + union vectorlike_header header; /* The associated mutex. */ Lisp_Object mutex; diff --git a/src/w32term.h b/src/w32term.h index 8d08ca0a2bf..de234cb57db 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -431,7 +431,7 @@ extern struct w32_output w32term_display; struct scroll_bar { /* This field is shared by all vectors. */ - struct vectorlike_header header; + union vectorlike_header header; /* The window we're a scroll bar for. */ Lisp_Object window; diff --git a/src/window.c b/src/window.c index cc1d2a7b36e..7f472523b49 100644 --- a/src/window.c +++ b/src/window.c @@ -3733,8 +3733,8 @@ make_parent_window (Lisp_Object window, bool horflag) o = XWINDOW (window); p = allocate_window (); - memcpy ((char *) p + sizeof (struct vectorlike_header), - (char *) o + sizeof (struct vectorlike_header), + memcpy ((char *) p + sizeof (union vectorlike_header), + (char *) o + sizeof (union vectorlike_header), word_size * VECSIZE (struct window)); /* P's buffer slot may change from nil to a buffer... */ adjust_window_count (p, 1); @@ -6232,7 +6232,7 @@ from the top of the window. */) struct save_window_data { - struct vectorlike_header header; + union vectorlike_header header; Lisp_Object selected_frame; Lisp_Object current_window; Lisp_Object f_current_buffer; @@ -6260,7 +6260,7 @@ struct save_window_data /* This is saved as a Lisp_Vector. */ struct saved_window { - struct vectorlike_header header; + union vectorlike_header header; Lisp_Object window, buffer, start, pointm, old_pointm; Lisp_Object pixel_left, pixel_top, pixel_height, pixel_width; diff --git a/src/window.h b/src/window.h index df7c23f824b..25c9686a9f0 100644 --- a/src/window.h +++ b/src/window.h @@ -88,7 +88,7 @@ struct cursor_pos struct window { /* This is for Lisp; the terminal code does not refer to it. */ - struct vectorlike_header header; + union vectorlike_header header; /* The frame this window is on. */ Lisp_Object frame; diff --git a/src/xterm.h b/src/xterm.h index 6274630706f..7ab20ba06c6 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -887,7 +887,7 @@ extern void x_mark_frame_dirty (struct frame *f); struct scroll_bar { /* These fields are shared by all vectors. */ - struct vectorlike_header header; + union vectorlike_header header; /* The window we're a scroll bar for. */ Lisp_Object window; diff --git a/src/xwidget.h b/src/xwidget.h index 22a8eb3a557..02a0453dabb 100644 --- a/src/xwidget.h +++ b/src/xwidget.h @@ -33,7 +33,7 @@ struct window; struct xwidget { - struct vectorlike_header header; + union vectorlike_header header; /* Auxiliary data. */ Lisp_Object plist; @@ -62,7 +62,7 @@ struct xwidget struct xwidget_view { - struct vectorlike_header header; + union vectorlike_header header; Lisp_Object model; Lisp_Object w; |