PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / g++.dg / pr67351.C
blobf5bdda6cca7995c72723fa900d2dc5f21a9167b5
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-optimized" } */
4 typedef unsigned char uchar;
5 typedef unsigned short ushort;
6 typedef unsigned int uint;
7 typedef unsigned long long uint64;
9 class MyRgba
11   uint rgba;
13 public:
14     explicit MyRgba (uint c):rgba (c)
15   {
16   };
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   }
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   }
41   void setG (uchar _g)
42   {
43     *this = fromRgba (r (), _g, b (), a ());
44   }
47 extern MyRgba giveMe ();
49 MyRgba
50 test ()
52   MyRgba a = giveMe ();
53   a.setG (0xf0);
54   return a;
57 class MyRgba64
59   uint64 rgba;
61 public:
62     explicit MyRgba64 (uint64 c):rgba (c)
63   {
64   };
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   }
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   }
89   void setG (ushort _g)
90   {
91     *this = fromRgba64 (r (), _g, b (), a ());
92   }
95 extern MyRgba64 giveMe64 ();
97 MyRgba64
98 test64 ()
100   MyRgba64 a = giveMe64 ();
101   a.setG (0xf0f0);
102   return a;
105 /* { dg-final { scan-tree-dump-not "<<" "optimized" } } */
106 /* { dg-final { scan-tree-dump-not ">>" "optimized" } } */