Browse Source

Fix incorrect cast to small integer type when comparing IntPtr with short.

This fixes a regression in Random_TestCast_1.M86().
pull/924/head
Daniel Grunwald 8 years ago
parent
commit
159cc29032
  1. 11
      ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

11
ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

@ -526,9 +526,9 @@ namespace ICSharpCode.Decompiler.CSharp @@ -526,9 +526,9 @@ namespace ICSharpCode.Decompiler.CSharp
} else {
var leftUType = NullableType.GetUnderlyingType(left.Type);
var rightUType = NullableType.GetUnderlyingType(right.Type);
if (leftUType.GetStackType() == inst.InputType) {
if (leftUType.GetStackType() == inst.InputType && !leftUType.IsSmallIntegerType()) {
targetType = leftUType;
} else if (rightUType.GetStackType() == inst.InputType) {
} else if (rightUType.GetStackType() == inst.InputType && !rightUType.IsSmallIntegerType()) {
targetType = rightUType;
} else {
targetType = compilation.FindType(inst.InputType.ToKnownTypeCode(leftUType.GetSign()));
@ -550,9 +550,10 @@ namespace ICSharpCode.Decompiler.CSharp @@ -550,9 +550,10 @@ namespace ICSharpCode.Decompiler.CSharp
// If converting one input wasn't sufficient, convert both:
left = left.ConvertTo(targetType, this);
right = right.ConvertTo(targetType, this);
rr = new OperatorResolveResult(compilation.FindType(KnownTypeCode.Boolean),
BinaryOperatorExpression.GetLinqNodeType(BinaryOperatorType.Equality, false),
left.ResolveResult, right.ResolveResult);
rr = new OperatorResolveResult(
compilation.FindType(KnownTypeCode.Boolean),
BinaryOperatorExpression.GetLinqNodeType(inst.Kind.ToBinaryOperatorType(), false),
left.ResolveResult, right.ResolveResult);
}
}
negateOutput = false;

Loading…
Cancel
Save