diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2002-07-06 17:19:51 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2002-07-06 17:19:51 +0000 |
commit | e66c864962a7b8c2564e802fa630283b0353082e (patch) | |
tree | dee8c6756ad2e58172d765352afd1cd7c6438dce /gcc | |
parent | 71b089f0be9871e2493469f5cb47add3035fa8a5 (diff) | |
download | gcc-e66c864962a7b8c2564e802fa630283b0353082e.zip gcc-e66c864962a7b8c2564e802fa630283b0353082e.tar.gz gcc-e66c864962a7b8c2564e802fa630283b0353082e.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/20020706-1.c | 50 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/20020706-2.c | 26 |
3 files changed, 81 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a18de74..0d8df23 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2002-07-06 Alexandre Oliva <aoliva@redhat.com> + + * gcc.c-torture/compile/20020706-1.c: New test. + * gcc.c-torture/compile/20020706-2.c: New test. + 2002-07-06 Brian R. Gaeke <brg@dgate.ORG>, Alexandre Oliva <aoliva@redhat.com> * 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 0000000..c8811bc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20020706-1.c @@ -0,0 +1,50 @@ +// Contributed by Alexandre Oliva <aoliva@redhat.com> +// 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 0000000..b84dda6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20020706-2.c @@ -0,0 +1,26 @@ +// Contributed by Alexandre Oliva <aoliva@redhat.com> +// 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); +} |