/* A simple test to demonstrate heap, stack, and global overrun
   detection. */

#include <stdio.h>
#include <stdlib.h>

short ga[100];

__attribute__((noinline))
int addup_wrongly ( short* arr )
{
   int sum = 0, i;
   for (i = 0; i <= 100; i++)
      sum += (int)arr[i];
   return sum;
}

__attribute__((noinline))
int do_other_stuff ( void )
{
   short la[100];
   return 123 + addup_wrongly(la);
}

__attribute__((noinline))
int do_stupid_malloc_stuff ( void )
{
   int sum = 0;
   unsigned char* duh = malloc(100 * sizeof(char));
   sum += duh[-1];
   free(duh);
   sum += duh[50];
   return sum;
}

int main ( void )
{
   long s = addup_wrongly(ga);
   s += do_other_stuff();
   s += do_stupid_malloc_stuff();
   if (s == 123456789) {
      fprintf(stdout, "well, i never!\n");
   } else {
      fprintf(stdout, "boringly as expected\n");
   }
   return 0;
}