Browse Source

Fix missing cast in signed uint<int comparison.

pull/897/head 3.0-Preview2
Daniel Grunwald 8 years ago
parent
commit
30aa3bd42f
  1. 9
      ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

9
ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

@ -546,14 +546,15 @@ namespace ICSharpCode.Decompiler.CSharp @@ -546,14 +546,15 @@ namespace ICSharpCode.Decompiler.CSharp
// attempt comparison without any additional casts
var rr = resolver.ResolveBinaryOperator(inst.Kind.ToBinaryOperatorType(), left.ResolveResult, right.ResolveResult)
as OperatorResolveResult;
if (rr != null && !rr.IsError
&& NullableType.GetUnderlyingType(rr.Operands[0].Type).GetSign() == inst.Sign
&& NullableType.GetUnderlyingType(rr.Operands[1].Type).GetSign() == inst.Sign)
{
if (rr != null && !rr.IsError) {
IType compUType = NullableType.GetUnderlyingType(rr.Operands[0].Type);
if (compUType.GetSign() == inst.Sign && compUType.GetStackType() == inst.InputType) {
return new BinaryOperatorExpression(left.Expression, op, right.Expression)
.WithILInstruction(inst)
.WithRR(rr);
}
}
// Ensure the inputs have the correct sign:
KnownTypeCode inputType = KnownTypeCode.None;
switch (inst.InputType) {

Loading…
Cancel
Save