From 925180d55f173e6eec2f8a7a8808a390f0aa2b68 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 19 Jun 2016 22:08:41 +0900 Subject: [PATCH] fixed bug in VisitStLoc: do not copy null literal pseudo type --- ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs index 756cd673f..e4502dd35 100644 --- a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs +++ b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs @@ -281,7 +281,9 @@ namespace ICSharpCode.Decompiler.CSharp protected internal override TranslatedExpression VisitStLoc(StLoc inst) { var translatedValue = Translate(inst.Value); - if (inst.Variable.Kind == VariableKind.StackSlot && inst.Variable.IsSingleDefinition && !loadedVariablesSet.Contains(inst.Variable)) { + if (inst.Variable.Kind == VariableKind.StackSlot && inst.Variable.IsSingleDefinition + && inst.Variable.StackType == translatedValue.Type.GetStackType() + && translatedValue.Type.Kind != TypeKind.Null && !loadedVariablesSet.Contains(inst.Variable)) { inst.Variable.Type = translatedValue.Type; } return Assignment(ConvertVariable(inst.Variable).WithoutILInstruction(), translatedValue).WithILInstruction(inst);