X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=libmudflap%2Ftestsuite%2Flibmudflap.c%2Fheap-scalestress.c;fp=libmudflap%2Ftestsuite%2Flibmudflap.c%2Fheap-scalestress.c;h=2d51731d611ec2b9059be22a1e21f6282bcf6afb;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=0000000000000000000000000000000000000000;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/libmudflap/testsuite/libmudflap.c/heap-scalestress.c b/libmudflap/testsuite/libmudflap.c/heap-scalestress.c new file mode 100644 index 00000000..2d51731d --- /dev/null +++ b/libmudflap/testsuite/libmudflap.c/heap-scalestress.c @@ -0,0 +1,79 @@ +/* zz30 + * + * demonstrate a splay-tree depth problem +*/ + +#include +#include +#include + +#ifndef SCALE +#define SCALE 100000 +#endif + + +struct list +{ + struct list *next; +}; + + +int +main () +{ + struct list *head = NULL; + struct list *tail = NULL; + struct list *p; + long n; + int direction; + + for (direction = 0; direction < 2; direction++) + { + fprintf (stdout, "allocating\n"); + fflush (stdout); + + for (n = 0; n < SCALE; ++n) + { + p = malloc (sizeof *p); + if (NULL == p) + { + fprintf (stdout, "malloc failed\n"); + break; + } + if (direction == 0) + { /* add at tail */ + p->next = NULL; + if (NULL != tail) + tail->next = p; + else + head = p; + tail = p; + } + else + { /* add at head */ + p->next = head; + if (NULL == tail) + tail = p; + head = p; + } + } + + fprintf (stdout, "freeing\n"); + fflush (stdout); + + while (NULL != head) + { + p = head; + head = head->next; + free (p); + } + + } + + fprintf (stdout, "done\n"); + fflush (stdout); + + return (0); +} + +/* { dg-output "allocating.*freeing.*allocating.*freeing.*done" } */