/* Copyright (C) 2003  Free Software Foundation.

   Verify that the malloc-like __builtin_ allocation functions are
   correctly aliased by the compiler.

   Written by Roger Sayle, 12th April 2003.  */

/* { dg-do link } */

typedef __SIZE_TYPE__ size_t;

extern void abort (void);
extern void *malloc (size_t);
extern void *calloc (size_t,size_t);

extern void link_error (void);

static int x;

void test1(void)
{
  int *ptr1, *ptr2;

  ptr1 = &x;
  ptr2 = (int*) malloc (sizeof (int));

  *ptr1 = 12;
  *ptr2 = 8;

  if (*ptr1 != 12)
    link_error();
}

void test2(void)
{
  int *ptr1, *ptr2;

  ptr1 = &x;
  ptr2 = (int*) calloc (1, sizeof (int));

  *ptr1 = 12;
  *ptr2 = 8;

  if (*ptr1 != 12)
    link_error ();
}

int main()
{
  test1 ();
  test2 ();
  return 0;
}

#ifndef __OPTIMIZE__
void link_error (void)
{
  abort ();
}
#endif

