pr77285-2.C: Require tls_native support.
[gcc.git] / gcc / testsuite / g++.dg / pr67351.C
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-optimized" } */
3
4 typedef unsigned char uchar;
5 typedef unsigned short ushort;
6 typedef unsigned int uint;
7 typedef unsigned long long uint64;
8
9 class MyRgba
10 {
11 uint rgba;
12
13 public:
14 explicit MyRgba (uint c):rgba (c)
15 {
16 };
17
18 static MyRgba fromRgba (uchar r, uchar g, uchar b, uchar a)
19 {
20 return MyRgba (uint (r) << 24
21 | uint (g) << 16 | uint (b) << 8 | uint (a));
22 }
23
24 uchar r ()
25 {
26 return rgba >> 24;
27 }
28 uchar g ()
29 {
30 return rgba >> 16;
31 }
32 uchar b ()
33 {
34 return rgba >> 8;
35 }
36 uchar a ()
37 {
38 return rgba;
39 }
40
41 void setG (uchar _g)
42 {
43 *this = fromRgba (r (), _g, b (), a ());
44 }
45 };
46
47 extern MyRgba giveMe ();
48
49 MyRgba
50 test ()
51 {
52 MyRgba a = giveMe ();
53 a.setG (0xf0);
54 return a;
55 }
56
57 class MyRgba64
58 {
59 uint64 rgba;
60
61 public:
62 explicit MyRgba64 (uint64 c):rgba (c)
63 {
64 };
65
66 static MyRgba64 fromRgba64 (ushort r, ushort g, ushort b, ushort a)
67 {
68 return MyRgba64 (uint64 (r) << 48
69 | uint64 (g) << 32 | uint64 (b) << 16 | uint64 (a));
70 }
71
72 ushort r ()
73 {
74 return rgba >> 48;
75 }
76 ushort g ()
77 {
78 return rgba >> 32;
79 }
80 ushort b ()
81 {
82 return rgba >> 16;
83 }
84 ushort a ()
85 {
86 return rgba;
87 }
88
89 void setG (ushort _g)
90 {
91 *this = fromRgba64 (r (), _g, b (), a ());
92 }
93 };
94
95 extern MyRgba64 giveMe64 ();
96
97 MyRgba64
98 test64 ()
99 {
100 MyRgba64 a = giveMe64 ();
101 a.setG (0xf0f0);
102 return a;
103 }
104
105 /* { dg-final { scan-tree-dump-not "<<" "optimized" } } */
106 /* { dg-final { scan-tree-dump-not ">>" "optimized" } } */