diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1eccbaa7c17e91a3d820123a27df39282ec5790b..f05d3e5182db3a9bc8d67ef553743cfe309d7ebb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-01-10 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/51801 + * gcc.dg/torture/pr51801.c: New testcase. + 2012-01-10 Tobias Burnus <burnus@net-b.de> PR fortran/51652 diff --git a/gcc/testsuite/gcc.dg/torture/pr51801.c b/gcc/testsuite/gcc.dg/torture/pr51801.c new file mode 100644 index 0000000000000000000000000000000000000000..c36cee306fb000b6adcb644c57650927fa6dbe9c --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr51801.c @@ -0,0 +1,62 @@ +/* { dg-do compile } */ + +typedef struct { char Vshow; } TScreen; +typedef struct _Misc { char Tshow; } Misc; +typedef struct _XtermWidgetRec { TScreen screen; Misc misc; } XtermWidgetRec, *XtermWidget; +extern XtermWidget term; + +void +handle_tekshow (void *gw, int allowswitch) +{ + XtermWidget xw = term; + if (!((xw)->misc.Tshow)) + set_tek_visibility (1); +} + +void +do_tekonoff (void *gw, void *closure, void *data) +{ + handle_tekshow (gw, 0); +} + +void +do_vtonoff (void *gw, void *closure, void *data) +{ +} + +void +handle_toggle (void (*proc) (void *gw, void *closure, void *data), + int var, char **params, unsigned int nparams, void *w, + void *closure, void *data) +{ + XtermWidget xw = term; + int dir = -2; + switch (nparams) + { + case 0: + dir = -1; + } + switch (dir) + { + case 1: + (*proc) (w, closure, data); + Bell (xw, 2, 0); + } +} + +void +HandleVisibility (void *w, char **params, unsigned int *param_count) +{ + XtermWidget xw = term; + if (*param_count == 2) + switch (params[0][0]) + { + case 'v': + handle_toggle (do_vtonoff, (int) ((int) (&(xw)->screen)->Vshow), + params + 1, (*param_count) - 1, w, (void *) 0, + (void *) 0); + handle_toggle (do_tekonoff, (int) ((int) ((xw)->misc.Tshow)), + params + 1, (*param_count) - 1, w, (void *) 0, + (void *) 0); + } +}