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:
MyRgba(uint c)14     explicit MyRgba (uint c):rgba (c)
15   {
16   };
17 
fromRgba(uchar r,uchar g,uchar b,uchar a)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 
r()24   uchar r ()
25   {
26     return rgba >> 24;
27   }
g()28   uchar g ()
29   {
30     return rgba >> 16;
31   }
b()32   uchar b ()
33   {
34     return rgba >> 8;
35   }
a()36   uchar a ()
37   {
38     return rgba;
39   }
40 
setG(uchar _g)41   void setG (uchar _g)
42   {
43     *this = fromRgba (r (), _g, b (), a ());
44   }
45 };
46 
47 extern MyRgba giveMe ();
48 
49 MyRgba
test()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:
MyRgba64(uint64 c)62     explicit MyRgba64 (uint64 c):rgba (c)
63   {
64   };
65 
fromRgba64(ushort r,ushort g,ushort b,ushort a)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 
r()72   ushort r ()
73   {
74     return rgba >> 48;
75   }
g()76   ushort g ()
77   {
78     return rgba >> 32;
79   }
b()80   ushort b ()
81   {
82     return rgba >> 16;
83   }
a()84   ushort a ()
85   {
86     return rgba;
87   }
88 
setG(ushort _g)89   void setG (ushort _g)
90   {
91     *this = fromRgba64 (r (), _g, b (), a ());
92   }
93 };
94 
95 extern MyRgba64 giveMe64 ();
96 
97 MyRgba64
test64()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" } } */
107