Subject: bug#20756: 25.0.50; struct selection_input_event data might be corrupted by assignments as another structure type

From: YAMAMOTO Mitsuharu <[email-masked]>
Date: Wed, 24 Jun 2015 09:56:25 +0900

>>>>> On Tue, 23 Jun 2015 16:44:26 -0700, Paul Eggert <[email-masked]> said:

> Thanks for tracking down and diagnosing this bug.  I've installed a
> patch as commit 1552e6737317ea2c85e06600e178114c6b0f9fb2 in emacs
> master; can you please try it in your environment?

Thanks for looking into this.  But it doesn't build as it is in the
original environment: OS X 10.7, and the following version of llvm-gcc

  i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)

The error message is:

In file included from ../../../emacs/trunk/src/dispnew.c:33:
../../../emacs/trunk/src/keyboard.h: In function ‘kbd_buffer_store_event_hold’:
../../../emacs/trunk/src/keyboard.h:461: error: expected specifier-qualifier-list before ‘*’ token
../../../emacs/trunk/src/keyboard.h:461: error: ‘struct <anonymous>’ has no member named ‘__b’
../../../emacs/trunk/src/keyboard.h:461: error: expected specifier-qualifier-list before ‘*’ token
../../../emacs/trunk/src/keyboard.h:461: error: ‘struct <anonymous>’ has no member named ‘__b’
../../../emacs/trunk/src/keyboard.h:461: error: bit-field ‘_gl_verify_error_if_negative’ width not an integer constant
make: *** [dispnew.o] Error 1

The output of gcc -E for the corresponding part is:

kbd_buffer_store_event_hold (struct input_event *event,
        struct input_event *hold_quit)
{
  union buffered_input_event *ev = (union buffered_input_event *) event;
  extern int (*_gl_verify_function461 (void)) [(!!sizeof (struct { unsigned int _gl_verify_error_if_negative: (sizeof *event == sizeof *ev && __builtin_offsetof (struct { char __a; *event __b; }, __b) == __builtin_offsetof (struct { char __a; *ev __b; }, __b)) ? 1 : -1; }))];
  return kbd_buffer_store_buffered_event ((union buffered_input_event *) event,
       hold_quit);
}

If I comment out the line for the "verify" macro, the it successfully
builds and runs without crash.

				     YAMAMOTO Mitsuharu
				[email-masked]