1/* PR middle-end/30704 */
2
3typedef __SIZE_TYPE__ size_t;
4extern void abort (void);
5extern int memcmp (const void *, const void *, size_t);
6extern void *memcpy (void *, const void *, size_t);
7
8long long
9f1 (void)
10{
11  long long t;
12  double d = 0x0.fffffffffffff000p-1022;
13  memcpy (&t, &d, sizeof (long long));
14  return t;
15}
16
17double
18f2 (void)
19{
20  long long t = 0x000fedcba9876543LL;
21  double d;
22  memcpy (&d, &t, sizeof (long long));
23  return d;
24}
25
26int
27main ()
28{
29  union
30  {
31    long long ll;
32    double d;
33  } u;
34
35  if (sizeof (long long) != sizeof (double) || __DBL_MIN_EXP__ != -1021)
36    return 0;
37
38  u.ll = f1 ();
39  if (u.d != 0x0.fffffffffffff000p-1022)
40    abort ();
41
42  u.d = f2 ();
43  if (u.ll != 0x000fedcba9876543LL)
44    abort ();
45
46  double b = 234.0;
47  long long c;
48  double d = b;
49  memcpy (&c, &b, sizeof (double));
50  long long e = c;
51  if (memcmp (&e, &d, sizeof (double)) != 0)
52    abort ();
53
54  return 0;
55}
56