From 33421d69494241aad4603601502a50f50fb1d2dd Mon Sep 17 00:00:00 2001 From: Josef Zlomek Date: Sat, 14 Feb 2004 20:43:18 +0100 Subject: [PATCH] * gcc.c-torture/compile/20040214-2.c: New test. From-SVN: r77821 --- gcc/testsuite/ChangeLog | 4 ++ .../gcc.c-torture/compile/20040214-2.c | 57 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/compile/20040214-2.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b9613ad8cf5..91484231857 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2004-02-14 Josef Zlomek + + * gcc.c-torture/compile/20040214-2.c: New test. + 2004-02-14 Andrew Pinski PR c++/14116 diff --git a/gcc/testsuite/gcc.c-torture/compile/20040214-2.c b/gcc/testsuite/gcc.c-torture/compile/20040214-2.c new file mode 100644 index 00000000000..352d5a5d764 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20040214-2.c @@ -0,0 +1,57 @@ +/* http://gcc.gnu.org/ml/gcc-patches/2004-02/msg01307.html */ + +typedef struct xdef xdef; +struct xdef +{ + char xtyp; + xdef *next; + int y; +}; + +extern void b (); +extern void *foo (void *bar); +extern void *foo2 (void *bar1, void *bar2); +extern void *qwe; + +static void +c (xdef * xp) +{ + b (xp); +} +static void +a (xdef ** xpp) +{ + xdef *xp; + xp = *xpp; + + foo (xp); + xp = foo2 (xp, qwe); + b (xp->next); + foo (xp); + if (xp->y) + { + foo (xp); + if (xp) + { + xdef *p = foo2 (xp, qwe); + foo2 (xp, p); + xp = foo (p); + } + else + { + foo2 (foo(*xpp), *xpp); + } + } + *xpp = foo2 (xpp, qwe); +} + +void +b (xdef ** xpp) +{ + xdef *xp = *xpp; + if (!xp) + return; + if (xp->xtyp == 0) + a (xpp); + c (xp); +}