aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.target/arm/pr59985.C
blob: 1351c486fe3e8e74a3ce4b6e0138855bd2c479d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/* { dg-do compile } */
/* { dg-skip-if "incompatible options" { arm_thumb1 } { "*" } { "" } } */
/* { dg-options "-g -fcompare-debug -O2 -march=armv7-a -mtune=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=hard" } */

extern void *f1 (unsigned long, unsigned long);
extern const struct line_map *f2 (void *, int, unsigned int, const char *, unsigned int);
extern unsigned int f3 (void *, unsigned int);
extern void *v1;
struct B { const char *s; int t; };
struct C { unsigned u; unsigned long long v; void *w; };
unsigned long long f4 (struct C *);
const char *f5 (void *, unsigned int, unsigned int *);
unsigned long long f6 (void *);

static inline unsigned long long
f7 (struct C *x, unsigned y)
{
  unsigned long long a, b;
  int u = x->u;
  a = y == 64 ? -1ULL : (1ULL << y) - 1;
  if (u + y > 64)
    {
      f6 (x->w);
      x->u = y;
      return b & a;
    }
  b = x->v;
  b >>= u;
  x->u = u + y;
  return b & a;
}

static const char *
f8 (const char *x)
{
  B **a;
  unsigned long t = __builtin_strlen (x);
  char *b;
  struct B *c;
  b = (char *) f1 (t + 1, 1);
  c = (struct B *) f1 (1, sizeof (struct B));
  __builtin_memcpy (b, x, t + 1);
  c->t = t;
  struct B *d = *a;
  return d->s;
}

unsigned int
f9 (struct C *x, void *y)
{
  static const char *a;
  static int b;
  static int c;
  bool d, e, f;
  unsigned t;
  bool prev_file = a != __null;
  if (f7 (x, 1))
    return ((unsigned int) 0);
  d = f7 (x, 1);
  e = f7 (x, 1);
  f = f7 (x, 1);
  a = f8 (f5 (y, f4 (x), &t));
  if (e) b = f4 (x);
  if (f)
    if (d)
      if (prev_file)
        f2 (v1, 1, false, __null, 0);
  return f3 (v1, c);
}