/* PR opt/6516 */ /* On x86, something about the structure of this function prevented cross-jumping from combining the three arms of the switch statement until the last moment. After which we did not delete dead code, which left a reference to the deleted ADDR_VEC. */ /* { dg-do compile { target fpic } } */ /* { dg-options "-O2 -frename-registers -fpic" } */ typedef unsigned long XID; typedef XID Window; typedef void Display; typedef unsigned long Time; typedef struct { int type; unsigned long serial; int send_event; Display *display; Window window; Window root; Window subwindow; Time time; int x, y; int x_root, y_root; unsigned int state; unsigned int button; int same_screen; } XButtonEvent; typedef struct { int type; unsigned long serial; int send_event; Display *display; Window window; Window root; Window subwindow; Time time; int x, y; int x_root, y_root; unsigned int state; char is_hint; int same_screen; } XMotionEvent; typedef struct { int type; unsigned long serial; int send_event; Display *display; Window window; Window root; Window subwindow; Time time; int x, y; int x_root, y_root; int mode; int detail; int same_screen; int focus; unsigned int state; } XCrossingEvent; typedef union _XEvent { int type; XButtonEvent xbutton; XMotionEvent xmotion; XCrossingEvent xcrossing; } XEvent; typedef struct { int width, height; Display *display; } Screen; typedef struct _CorePart { Screen *screen; } CorePart; typedef struct _WidgetRec { CorePart core; } WidgetRec; typedef struct _WidgetRec *Widget; typedef struct _SmeRec *SmeObject; typedef struct _SimpleMenuPart { SmeObject entry_set; } SimpleMenuPart; typedef struct _SimpleMenuRec { SimpleMenuPart simple_menu; } SimpleMenuRec; typedef struct _SimpleMenuRec* SimpleMenuWidget; typedef short Position; typedef unsigned short Dimension; typedef char Boolean; typedef struct _RectObjPart { Position x, y; Dimension width, height; Dimension border_width; Boolean managed; Boolean sensitive; Boolean ancestor_sensitive; }RectObjPart; typedef struct _RectObjRec { RectObjPart rectangle; } RectObjRec; typedef struct _RectObjRec *RectObj; SmeObject DoGetEventEntry(); SmeObject GetEventEntry(Widget w, XEvent *event) { int x_loc, y_loc, x_root; SimpleMenuWidget smw = (SimpleMenuWidget)w; SmeObject entry; int warp, move; switch (event->type) { case 6: x_loc = event->xmotion.x; y_loc = event->xmotion.y; x_root = event->xmotion.x_root; break; case 7: case 8: x_loc = event->xcrossing.x; y_loc = event->xcrossing.y; x_root = event->xcrossing.x_root; break; case 4: case 5: x_loc = event->xbutton.x; y_loc = event->xbutton.y; x_root = event->xbutton.x_root; break; default: XtAppError(XtWidgetToApplicationContext(w), "Unknown event type in GetEventEntry()."); return (((void *)0)); } if (x_loc < 0 || x_loc >= (((RectObj)smw)->rectangle.width) || y_loc < 0 || y_loc >= (((RectObj)smw)->rectangle.height)) return (((void *)0)); if (x_root == ((((w)->core.screen))->width) - 1 && (((RectObj)w)->rectangle.x) + (((RectObj)w)->rectangle.width) + ((((RectObj)w)->rectangle.border_width)) > x_root) { warp = -8; if (smw->simple_menu.entry_set) { entry = DoGetEventEntry(w, (((RectObj)smw->simple_menu.entry_set)->rectangle.x) + (((RectObj)smw->simple_menu.entry_set)->rectangle.width) + 1, y_loc); Unhighlight(w, event, ((void *)0), ((void *)0)); if (entry) { warp = -(int)(((RectObj)entry)->rectangle.width) >> 1; move = x_loc - (((RectObj)entry)->rectangle.width) - (((RectObj)entry)->rectangle.x) + (((RectObj)w)->rectangle.border_width); } else { warp = 0; move = ((((w)->core.screen))->width) - ((((RectObj)w)->rectangle.x) + (((RectObj)w)->rectangle.width) + ((((RectObj)w)->rectangle.border_width) << 1)); } } else { warp = 0; move = ((((w)->core.screen))->width) - ((((RectObj)w)->rectangle.x) + (((RectObj)w)->rectangle.width) + ((((RectObj)w)->rectangle.border_width) << 1)); } } else if (x_root == 0 && (((RectObj)w)->rectangle.x) < 0) { warp = 8; if (smw->simple_menu.entry_set) { entry = DoGetEventEntry(w, (((RectObj)smw->simple_menu.entry_set)->rectangle.x) - 1, y_loc); Unhighlight(w, event, ((void *)0), ((void *)0)); if (entry) { warp = (((RectObj)entry)->rectangle.width) >> 1; move = x_loc - (((RectObj)entry)->rectangle.x); } else move = x_loc + (((RectObj)w)->rectangle.border_width); } else move = x_loc + (((RectObj)w)->rectangle.border_width); } else move = warp = 0; if (move) XtMoveWidget(w, (((RectObj)w)->rectangle.x) + move, (((RectObj)w)->rectangle.y)); if (warp) XWarpPointer((((w)->core.screen)->display), 0L, 0L, 0, 0, 0, 0, warp, 0); return (DoGetEventEntry(w, x_loc, y_loc)); }