Browse Source

Fix #1371: assertion on invalid I4->O conversion.

pull/1633/head
Daniel Grunwald 6 years ago
parent
commit
62a0046043
  1. 6
      ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

6
ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

@ -1721,6 +1721,10 @@ namespace ICSharpCode.Decompiler.CSharp
} else if (inst.TargetType == IL.PrimitiveType.Ref) { } else if (inst.TargetType == IL.PrimitiveType.Ref) {
// converting to unknown ref-type // converting to unknown ref-type
targetType = new ByReferenceType(compilation.FindType(KnownTypeCode.Byte)); targetType = new ByReferenceType(compilation.FindType(KnownTypeCode.Byte));
} else if (inst.TargetType == IL.PrimitiveType.None) {
// convert to some object type
// (e.g. invalid I4->O conversion)
targetType = compilation.FindType(KnownTypeCode.Object);
} else { } else {
targetType = GetType(inst.TargetType.ToKnownTypeCode()); targetType = GetType(inst.TargetType.ToKnownTypeCode());
} }
@ -2061,7 +2065,7 @@ namespace ICSharpCode.Decompiler.CSharp
protected internal override TranslatedExpression VisitLdLen(LdLen inst, TranslationContext context) protected internal override TranslatedExpression VisitLdLen(LdLen inst, TranslationContext context)
{ {
TranslatedExpression arrayExpr = Translate(inst.Array); TranslatedExpression arrayExpr = Translate(inst.Array, typeHint: compilation.FindType(KnownTypeCode.Array));
if (arrayExpr.Type.Kind != TypeKind.Array) { if (arrayExpr.Type.Kind != TypeKind.Array) {
arrayExpr = arrayExpr.ConvertTo(compilation.FindType(KnownTypeCode.Array), this); arrayExpr = arrayExpr.ConvertTo(compilation.FindType(KnownTypeCode.Array), this);
} }

Loading…
Cancel
Save