2 * enum-intrins.cs: Tests for Enum.HasFlag () intrinsic.
15 enum SByteEnum
: sbyte {
21 enum ShortEnum
: short {
27 enum UShortEnum
: ushort {
39 enum UIntEnum
: uint {
45 enum LongEnum
: long {
51 enum ULongEnum
: ulong {
59 static int TestIntrinsic ()
61 var byteEnum1
= ByteEnum
.A
| ByteEnum
.B
;
62 if (byteEnum1
.HasFlag (ByteEnum
.C
))
65 var byteEnum2
= ByteEnum
.A
| ByteEnum
.C
;
66 if (!byteEnum2
.HasFlag (ByteEnum
.C
))
69 var sbyteEnum1
= SByteEnum
.A
| SByteEnum
.B
;
70 if (sbyteEnum1
.HasFlag (SByteEnum
.C
))
73 var sbyteEnum2
= SByteEnum
.A
| SByteEnum
.C
;
74 if (!sbyteEnum2
.HasFlag (SByteEnum
.C
))
77 var shortEnum1
= ShortEnum
.A
| ShortEnum
.B
;
78 if (shortEnum1
.HasFlag (ShortEnum
.C
))
81 var shortEnum2
= ShortEnum
.A
| ShortEnum
.C
;
82 if (!shortEnum2
.HasFlag (ShortEnum
.C
))
85 var ushortEnum1
= UShortEnum
.A
| UShortEnum
.B
;
86 if (ushortEnum1
.HasFlag (UShortEnum
.C
))
89 var ushortEnum2
= UShortEnum
.A
| UShortEnum
.C
;
90 if (!ushortEnum2
.HasFlag (UShortEnum
.C
))
93 var intEnum1
= IntEnum
.A
| IntEnum
.B
;
94 if (intEnum1
.HasFlag (IntEnum
.C
))
97 var intEnum2
= IntEnum
.A
| IntEnum
.C
;
98 if (!intEnum2
.HasFlag (IntEnum
.C
))
101 var uintEnum1
= UIntEnum
.A
| UIntEnum
.B
;
102 if (uintEnum1
.HasFlag (UIntEnum
.C
))
105 var uintEnum2
= UIntEnum
.A
| UIntEnum
.C
;
106 if (!uintEnum2
.HasFlag (UIntEnum
.C
))
109 var longEnum1
= LongEnum
.A
| LongEnum
.B
;
110 if (longEnum1
.HasFlag (LongEnum
.C
))
113 var longEnum2
= LongEnum
.A
| LongEnum
.C
;
114 if (!longEnum2
.HasFlag (LongEnum
.C
))
117 var ulongEnum1
= ULongEnum
.A
| ULongEnum
.B
;
118 if (ulongEnum1
.HasFlag (ULongEnum
.C
))
121 var ulongEnum2
= ULongEnum
.A
| ULongEnum
.C
;
122 if (!ulongEnum2
.HasFlag (ULongEnum
.C
))
128 static int TestBoxed ()
130 /* The casts to Enum will make the JIT's pattern matching miss the call. */
132 var byteEnum1
= ByteEnum
.A
| ByteEnum
.B
;
133 if (byteEnum1
.HasFlag ((Enum
)(object) ByteEnum
.C
))
136 var byteEnum2
= ByteEnum
.A
| ByteEnum
.C
;
137 if (!byteEnum2
.HasFlag ((Enum
)(object) ByteEnum
.C
))
140 var sbyteEnum1
= SByteEnum
.A
| SByteEnum
.B
;
141 if (sbyteEnum1
.HasFlag ((Enum
)(object) SByteEnum
.C
))
144 var sbyteEnum2
= SByteEnum
.A
| SByteEnum
.C
;
145 if (!sbyteEnum2
.HasFlag ((Enum
)(object) SByteEnum
.C
))
148 var shortEnum1
= ShortEnum
.A
| ShortEnum
.B
;
149 if (shortEnum1
.HasFlag ((Enum
)(object) ShortEnum
.C
))
152 var shortEnum2
= ShortEnum
.A
| ShortEnum
.C
;
153 if (!shortEnum2
.HasFlag ((Enum
)(object) ShortEnum
.C
))
156 var ushortEnum1
= UShortEnum
.A
| UShortEnum
.B
;
157 if (ushortEnum1
.HasFlag ((Enum
)(object) UShortEnum
.C
))
160 var ushortEnum2
= UShortEnum
.A
| UShortEnum
.C
;
161 if (!ushortEnum2
.HasFlag ((Enum
)(object) UShortEnum
.C
))
164 var intEnum1
= IntEnum
.A
| IntEnum
.B
;
165 if (intEnum1
.HasFlag ((Enum
)(object) IntEnum
.C
))
168 var intEnum2
= IntEnum
.A
| IntEnum
.C
;
169 if (!intEnum2
.HasFlag ((Enum
)(object) IntEnum
.C
))
172 var uintEnum1
= UIntEnum
.A
| UIntEnum
.B
;
173 if (uintEnum1
.HasFlag ((Enum
)(object) UIntEnum
.C
))
176 var uintEnum2
= UIntEnum
.A
| UIntEnum
.C
;
177 if (!uintEnum2
.HasFlag ((Enum
)(object) UIntEnum
.C
))
180 var longEnum1
= LongEnum
.A
| LongEnum
.B
;
181 if (longEnum1
.HasFlag ((Enum
)(object) LongEnum
.C
))
184 var longEnum2
= LongEnum
.A
| LongEnum
.C
;
185 if (!longEnum2
.HasFlag ((Enum
)(object) LongEnum
.C
))
188 var ulongEnum1
= ULongEnum
.A
| ULongEnum
.B
;
189 if (ulongEnum1
.HasFlag ((Enum
)(object) ULongEnum
.C
))
192 var ulongEnum2
= ULongEnum
.A
| ULongEnum
.C
;
193 if (!ulongEnum2
.HasFlag ((Enum
)(object) ULongEnum
.C
))
199 public static int Main ()
203 if ((res
= TestIntrinsic ()) != 0)
206 if ((res
= TestBoxed ()) != 0)