aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.dg/20020430-1.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.dg/20020430-1.c')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/20020430-1.c190
1 files changed, 190 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/20020430-1.c b/gcc-4.9/gcc/testsuite/gcc.dg/20020430-1.c
new file mode 100644
index 000000000..8fcdfba0f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/20020430-1.c
@@ -0,0 +1,190 @@
+/* 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));
+}