diff --git a/ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs b/ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs index 9cb5523ab..6e8444a1c 100644 --- a/ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs +++ b/ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs @@ -985,12 +985,24 @@ namespace ICSharpCode.Decompiler.ILAst InferTypeForExpression(right, typeSystem.IntPtr); return leftPreferred; } + if (IsEnum(leftPreferred)) { + //E+U=E + left.InferredType = left.ExpectedType = leftPreferred; + InferTypeForExpression(right, GetEnumUnderlyingType(leftPreferred)); + return leftPreferred; + } TypeReference rightPreferred = DoInferTypeForExpression(right, expectedType); if (rightPreferred is PointerType) { InferTypeForExpression(left, typeSystem.IntPtr); right.InferredType = right.ExpectedType = rightPreferred; return rightPreferred; } + if (IsEnum(rightPreferred)) { + //U+E=E + right.InferredType = right.ExpectedType = rightPreferred; + InferTypeForExpression(left, GetEnumUnderlyingType(rightPreferred)); + return rightPreferred; + } return InferBinaryArguments(left, right, expectedType, leftPreferred: leftPreferred, rightPreferred: rightPreferred); }