Daily bump.
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / ieee / pr108540-1.c
blobebd4c502ee5d039b37460f15481fd01c8e718b74
1 /* PR tree-optimization/108540 */
3 __attribute__((noipa)) void
4 bar (const char *cp, unsigned long size, char sign, int dsgn)
6 if (__builtin_strcmp (cp, "ZERO") != 0 || size != 4 || sign != '-' || dsgn != 1)
7 __builtin_abort ();
10 __attribute__((noipa)) void
11 foo (int x, int ch, double d)
13 const char *cp = "";
14 unsigned long size = 0;
15 char sign = '\0';
16 switch (x)
18 case 42:
19 if (__builtin_isinf (d))
21 if (d < 0)
22 sign = '-';
23 cp = "Inf";
24 size = 3;
25 break;
27 if (__builtin_isnan (d))
29 cp = "NaN";
30 size = 3;
31 break;
33 if (d < 0)
35 d = -d;
36 sign = '-';
38 else if (d == 0.0 && __builtin_signbit (d))
39 sign = '-';
40 else
41 sign = '\0';
42 if (ch == 'a' || ch == 'A')
44 union U { long long l; double d; } u;
45 int dsgn;
46 u.d = d;
47 if (u.l < 0)
49 dsgn = 1;
50 u.l &= 0x7fffffffffffffffLL;
52 else
53 dsgn = 0;
54 if (__builtin_isinf (d))
56 cp = "INF";
57 size = 3;
59 else if (__builtin_isnan (d))
61 cp = "NAN";
62 size = 3;
64 else if (d == 0)
66 cp = "ZERO";
67 size = 4;
69 else
71 cp = "WRONG";
72 size = 5;
74 bar (cp, size, sign, dsgn);
79 int
80 main ()
82 foo (42, 'a', -0.0);
83 return 0;