From f7f657204ed98a80914bfb4ffd651d38ae091d1f Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 15 Mar 2019 23:48:49 +0100 Subject: [PATCH] Fix #1447: Assertion on `numeric.compound.add.old(..., ldc.i8 1)` --- ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs index f248b0236..220484bf3 100644 --- a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs +++ b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs @@ -1326,14 +1326,11 @@ namespace ICSharpCode.Decompiler.CSharp TranslatedExpression HandleCompoundAssignment(NumericCompoundAssign inst, AssignmentOperatorType op) { var target = Translate(inst.Target); - var value = Translate(inst.Value); - value = PrepareArithmeticArgument(value, inst.RightInputType, inst.Sign, inst.IsLifted); - TranslatedExpression resultExpr; if (inst.CompoundAssignmentType == CompoundAssignmentType.EvaluatesToOldValue) { Debug.Assert(op == AssignmentOperatorType.Add || op == AssignmentOperatorType.Subtract); - Debug.Assert(value.ResolveResult.IsCompileTimeConstant && 1.Equals(value.ResolveResult.ConstantValue)); + Debug.Assert(inst.Value.MatchLdcI(1)); UnaryOperatorType unary; ExpressionType exprType; if (op == AssignmentOperatorType.Add) { @@ -1347,6 +1344,8 @@ namespace ICSharpCode.Decompiler.CSharp .WithILInstruction(inst) .WithRR(new OperatorResolveResult(target.Type, exprType, target.ResolveResult)); } else { + var value = Translate(inst.Value); + value = PrepareArithmeticArgument(value, inst.RightInputType, inst.Sign, inst.IsLifted); switch (op) { case AssignmentOperatorType.Add: case AssignmentOperatorType.Subtract: