Fix Decode exception condition (#1377)

This commit is contained in:
Ficture Seven 2020-07-15 11:48:16 +04:00 committed by GitHub
parent 788ca6a411
commit 863b0c8dcb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -4,6 +4,7 @@ using ARMeilleure.Memory;
using ARMeilleure.State; using ARMeilleure.State;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
namespace ARMeilleure.Decoders namespace ARMeilleure.Decoders
{ {
@ -132,17 +133,22 @@ namespace ARMeilleure.Decoders
} }
} }
if (blocks.Count == 0) if (blocks.Count == 1 && blocks[0].OpCodes.Count == 0)
{ {
throw new InvalidOperationException($"Decoded 0 blocks. Entry point = 0x{address:X}."); Debug.Assert(blocks[0].Exit);
Debug.Assert(blocks[0].Address == blocks[0].EndAddress);
throw new InvalidOperationException($"Decoded a single empty exit block. Entry point = 0x{address:X}.");
} }
if (!singleBlock) if (!singleBlock)
{ {
return TailCallRemover.RunPass(address, blocks); return TailCallRemover.RunPass(address, blocks);
} }
else
return blocks.ToArray(); {
return blocks.ToArray();
}
} }
public static bool BinarySearch(List<Block> blocks, ulong address, out int index) public static bool BinarySearch(List<Block> blocks, ulong address, out int index)