Nullable.NullableInfo.GetEnumUnderlyingType (rc.Module, left.Type) :
EnumSpec.GetUnderlyingType (left.Type);
}
- } else if (IsEnumOrNullableEnum (left.Type)) {
- result_type = left.Type;
} else {
- result_type = right.Type;
+ if (IsEnumOrNullableEnum (left.Type)) {
+ result_type = left.Type;
+ } else {
+ result_type = right.Type;
+ }
+
+ if (expr is Nullable.LiftedBinaryOperator && !result_type.IsNullableType)
+ result_type = rc.Module.PredefinedTypes.Nullable.TypeSpec.MakeGenericType (rc.Module, new[] { result_type });
}
return EmptyCast.Create (expr, result_type);
--- /dev/null
+using System;
+
+enum E
+{
+ V
+}
+
+class C
+{
+ public static void Main ()
+ {
+ byte? foo = 0;
+ E e = 0;
+ var res = foo - e;
+ Console.WriteLine (res);
+ var res2 = e - foo;
+ Console.WriteLine (res2);
+ res = null;
+ res2 = null;
+ }
+}
\ No newline at end of file
</method>\r
</type>\r
</test>\r
+ <test name="gtest-590.cs">\r
+ <type name="C">\r
+ <method name="Void Main()" attrs="150">\r
+ <size>132</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="gtest-anontype-01.cs">\r
<type name="Test">\r
<method name="Int32 Main()" attrs="150">\r