// RUN: %llvmgcc -w -S %s -o - | llvm-as -o /dev/null

/* These are random tests that I used when working on the GCC frontend 
   originally. */

// test floating point comparison!
int floatcomptest(double *X, double *Y, float *x, float *y) {
  return *X < *Y || *x < *y;
}

extern void *malloc(unsigned);

// Exposed a bug
void *memset_impl(void *dstpp, int c, unsigned len) {
  long long int dstp = (long long int) dstpp;

  while (dstp % 4 != 0)
    {
      ((unsigned char *) dstp)[0] = c;
      dstp += 1;
      len -= 1;
    }
  return dstpp;
}

// TEST problem with signed/unsigned versions of the same constants being shared
// incorrectly!
//
static char *temp;
static int remaining;
static char *localmalloc(int size) {
  char *blah;
  
  if (size>remaining) 
    {
      temp = (char *) malloc(32768);
      remaining = 32768;
      return temp;
    }
  return 0;
}

typedef struct { double X; double Y; int Z; } PBVTest;

PBVTest testRetStruct(float X, double Y, int Z) {
  PBVTest T = { X, Y, Z };
  return T;
}
PBVTest testRetStruct2(void);  // external func no inlining


double CallRetStruct(float X, double Y, int Z) {
  PBVTest T = testRetStruct2();
  return T.X+X+Y+Z;
}


