diff --git a/ARMeilleure/Decoders/Decoder.cs b/ARMeilleure/Decoders/Decoder.cs index de62d125..9ec95ab6 100644 --- a/ARMeilleure/Decoders/Decoder.cs +++ b/ARMeilleure/Decoders/Decoder.cs @@ -4,6 +4,7 @@ using ARMeilleure.Memory; using ARMeilleure.State; using System; using System.Collections.Generic; +using System.Diagnostics; 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) { return TailCallRemover.RunPass(address, blocks); } - - return blocks.ToArray(); + else + { + return blocks.ToArray(); + } } public static bool BinarySearch(List blocks, ulong address, out int index)