/* PR target/7177
   Problem with cris-axis-elf: ICE in global.
   Origin: hp@axis.com.  */

typedef __SIZE_TYPE__ size_t;
void f1 (void *);
char *f2 (const char *);
int atoi (const char *);
char *strchr (const char *, int);
int strcmp (const char *, const char *);
size_t strlen (const char *);
typedef enum { A, B, C } t1;
extern const char _v[];

static t1
f (const char* p1, const char* p2, char p3)
{
  char *v1;
  char *v2;
  char *a;
  char *v3;
  char *v4;
  char *v5;
  char *e;
  char *v6;
  t1 r = C;

  v1 = f2 (p2);
  v4 = f2 (p1);

  a = v2 = v1;
  e = v5 = v4;
  memcpy (&e, &e, sizeof (e));

  v3 = strchr (v2, ',');
  v6 = strchr (v5, ',');

  while ((_v + 1)[(unsigned) *a] & 4)
    a++;
  while ((_v + 1)[(unsigned) *e] & 4)
    e++;

  if (a == v3 && e == v6)
    {
      if (p3)
        r = atoi (v5) < atoi (v2) ? B : A;
      else
        r = atoi (v5) > atoi (v2) ? B : A;
      v2 = ++a;
      v5 = ++e;
      v3 = strchr (v2, ',');
      v6 = strchr (v5, ',');

      while ((_v + 1)[(unsigned) *a] & 4)
        a++;
      while ((_v + 1)[(unsigned) *e] & 4)
        e++;

      if (a == v3 && e == v6)
        {
          if (r == B)
            r = B;
          else if (p3)
            r = atoi (v5) < atoi (v2) ? B : A;
          else
            r = atoi (v5) > atoi (v2) ? B : A;
        }
      else
        r = C;
    }

  f1 (v1);
  f1 (v4);
  return r;
}
