1 /* { dg-do compile { target arm*-*-* } } */
2 /* { dg-skip-if "incompatible options" { arm_thumb1 } } */
3 /* { dg-options "-g -fcompare-debug -O2 -march=armv7-a -mtune=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=hard" } */
4 /* { dg-skip-if "need hardfp abi" { *-*-* } { "-mfloat-abi=soft" } { "" } } */
5 
6 extern void *f1 (unsigned long, unsigned long);
7 extern const struct line_map *f2 (void *, int, unsigned int, const char *, unsigned int);
8 extern unsigned int f3 (void *, unsigned int);
9 extern void *v1;
10 struct B { const char *s; int t; };
11 struct C { unsigned u; unsigned long long v; void *w; };
12 unsigned long long f4 (struct C *);
13 const char *f5 (void *, unsigned int, unsigned int *);
14 unsigned long long f6 (void *);
15 
16 static inline unsigned long long
f7(struct C * x,unsigned y)17 f7 (struct C *x, unsigned y)
18 {
19   unsigned long long a, b;
20   int u = x->u;
21   a = y == 64 ? -1ULL : (1ULL << y) - 1;
22   if (u + y > 64)
23     {
24       f6 (x->w);
25       x->u = y;
26       return b & a;
27     }
28   b = x->v;
29   b >>= u;
30   x->u = u + y;
31   return b & a;
32 }
33 
34 static const char *
f8(const char * x)35 f8 (const char *x)
36 {
37   B **a;
38   unsigned long t = __builtin_strlen (x);
39   char *b;
40   struct B *c;
41   b = (char *) f1 (t + 1, 1);
42   c = (struct B *) f1 (1, sizeof (struct B));
43   __builtin_memcpy (b, x, t + 1);
44   c->t = t;
45   struct B *d = *a;
46   return d->s;
47 }
48 
49 unsigned int
f9(struct C * x,void * y)50 f9 (struct C *x, void *y)
51 {
52   static const char *a;
53   static int b;
54   static int c;
55   bool d, e, f;
56   unsigned t;
57   bool prev_file = a != __null;
58   if (f7 (x, 1))
59     return ((unsigned int) 0);
60   d = f7 (x, 1);
61   e = f7 (x, 1);
62   f = f7 (x, 1);
63   a = f8 (f5 (y, f4 (x), &t));
64   if (e) b = f4 (x);
65   if (f)
66     if (d)
67       if (prev_file)
68         f2 (v1, 1, false, __null, 0);
69   return f3 (v1, c);
70 }
71