1 /* Test that operations on bit-fields yield results reduced to bit-field
3 /* Origin: Joseph Myers <jsm@polyomino.org.uk> */
5 extern void exit (int);
6 extern void abort (void);
9 unsigned long long u33
: 33;
10 unsigned long long u40
: 40;
11 unsigned long long u41
: 41;
14 struct s a
= { 0x100000, 0x100000, 0x100000 };
15 struct s b
= { 0x100000000ULL
, 0x100000000ULL
, 0x100000000ULL
};
16 struct s c
= { 0x1FFFFFFFFULL
, 0, 0 };
21 if (a
.u33
* a
.u33
!= 0 || a
.u33
* a
.u40
!= 0 || a
.u40
* a
.u33
!= 0
22 || a
.u40
* a
.u40
!= 0)
24 if (a
.u33
* a
.u41
!= 0x10000000000ULL
25 || a
.u40
* a
.u41
!= 0x10000000000ULL
26 || a
.u41
* a
.u33
!= 0x10000000000ULL
27 || a
.u41
* a
.u40
!= 0x10000000000ULL
28 || a
.u41
* a
.u41
!= 0x10000000000ULL
)
30 if (b
.u33
+ b
.u33
!= 0)
32 if (b
.u33
+ b
.u40
!= 0x200000000ULL
33 || b
.u33
+ b
.u41
!= 0x200000000ULL
34 || b
.u40
+ b
.u33
!= 0x200000000ULL
35 || b
.u40
+ b
.u40
!= 0x200000000ULL
36 || b
.u40
+ b
.u41
!= 0x200000000ULL
37 || b
.u41
+ b
.u33
!= 0x200000000ULL
38 || b
.u41
+ b
.u40
!= 0x200000000ULL
39 || b
.u41
+ b
.u41
!= 0x200000000ULL
)
41 if (a
.u33
- b
.u33
!= 0x100100000ULL
42 || a
.u33
- b
.u40
!= 0xFF00100000ULL
43 || a
.u33
- b
.u41
!= 0x1FF00100000ULL
44 || a
.u40
- b
.u33
!= 0xFF00100000ULL
45 || a
.u40
- b
.u40
!= 0xFF00100000ULL
46 || a
.u40
- b
.u41
!= 0x1FF00100000ULL
47 || a
.u41
- b
.u33
!= 0x1FF00100000ULL
48 || a
.u41
- b
.u40
!= 0x1FF00100000ULL
49 || a
.u41
- b
.u41
!= 0x1FF00100000ULL
)
51 if (++c
.u33
!= 0 || --c
.u40
!= 0xFFFFFFFFFFULL
|| c
.u41
-- != 0)