From e66c864962a7b8c2564e802fa630283b0353082e Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Sat, 6 Jul 2002 17:19:51 +0000 Subject: [PATCH] 20020706-1.c: New test. * gcc.c-torture/compile/20020706-1.c: New test. * gcc.c-torture/compile/20020706-2.c: New test. From-SVN: r55290 --- gcc/testsuite/ChangeLog | 5 ++ .../gcc.c-torture/compile/20020706-1.c | 50 +++++++++++++++++++ .../gcc.c-torture/compile/20020706-2.c | 26 ++++++++++ 3 files changed, 81 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/compile/20020706-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/20020706-2.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a18de744415..0d8df23b43c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2002-07-06 Alexandre Oliva + + * gcc.c-torture/compile/20020706-1.c: New test. + * gcc.c-torture/compile/20020706-2.c: New test. + 2002-07-06 Brian R. Gaeke , Alexandre Oliva * g++.dg/warn/incomplete1.C: New test. diff --git a/gcc/testsuite/gcc.c-torture/compile/20020706-1.c b/gcc/testsuite/gcc.c-torture/compile/20020706-1.c new file mode 100644 index 00000000000..c8811bc68ff --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20020706-1.c @@ -0,0 +1,50 @@ +// Contributed by Alexandre Oliva +// From Red Hat case 106165. + +typedef struct s1 +{ + unsigned short v1; + unsigned char *v2; +} S1; + +extern void bar(const struct s1 *const hdb); +extern unsigned char* foo (); + +unsigned int sn; +S1 *hdb; +S1 *pb; +unsigned short len; + +unsigned int crashIt() +{ + unsigned char *p; + unsigned int nsn; + unsigned short cnt; + + if (sn != 0) return 1; + + if ((len < 12) || ((p = (((pb->v1) >= 8) ? pb->v2 : foo() )) == 0)) + return 1; + + nsn = ( + (((*(unsigned int*)p) & 0x000000ff) << 24) | + (((*(unsigned int*)p) & 0x0000ff00) << 8) | + (((*(unsigned int*)p) & 0x00ff0000) >> 8) | + (((*(unsigned int*)p) & 0xff000000) >> 24) ); + p += 4; + + cnt = (unsigned short) (( + (((*(unsigned int*)p) & 0x000000ff) << 24) | + (((*(unsigned int*)p) & 0x0000ff00) << 8) | + (((*(unsigned int*)p) & 0x00ff0000) >> 8) | + (((*(unsigned int*)p) & 0xff000000) >> 24) ) & + 0xffff); + + if ((len != 12 + (cnt * 56)) || (nsn == 0)) + { + bar(hdb); + return 1; + } + + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/20020706-2.c b/gcc/testsuite/gcc.c-torture/compile/20020706-2.c new file mode 100644 index 00000000000..b84dda60fd3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20020706-2.c @@ -0,0 +1,26 @@ +// Contributed by Alexandre Oliva +// From Red Hat case 106165. + +typedef unsigned short (FUNC_P) (void *, unsigned char *, unsigned short); + +void crashIt(int id, FUNC_P *func, unsigned char *funcparm) +{ + unsigned char buff[5], reverse[4]; + unsigned char *bp = buff; + unsigned char *rp = reverse; + unsigned short int count = 0; + unsigned short cnt; + while (id > 0) + { + *rp++ = (unsigned char) (id & 0x7F); + id >>= 7; + count++; + } + cnt = count + 1; + while ((count--) > 1) + { + *bp++ = (unsigned char)(*(--rp) | 0x80); + } + *bp++ = *(--rp); + (void)(*func)(funcparm, buff, cnt); +}