Enemy Spawner Crash

I keep getting a crash if I add an IF statement to verify enemies killed.

using UnityEngine;
using System.Collections;

public class SpawnManager : MonoBehaviour
{

    public GameObject[] enemy;
    public Transform spawnX;
    public Transform spawnY;

    //wave control
    public int maxEnemy;
    public int enemyCount;
    public float spawnWait;
    public float startWait;
    public float waveWait;
    private static int wave;
    private int enemiesSpawned;
    public static int enemiesKilled;
    // end wave control
    // Use this for initialization
    void Start()
    {
        StartCoroutine(SpawnWaves());
        wave = 1;
    }

    // Update is called once per frame
    void Update()
    {
        Debug.Log(enemiesSpawned + "    " + wave);
        if (enemiesKilled == enemyCount)//THIS CAUSES THE CRASH, EVEN INSIDE THE IENUMERATOR
        {
            waveWait += Time.deltaTime;
            if(waveWait >= 5)
            GetNextWave();
        }
    }

    IEnumerator SpawnWaves()
    {
        yield return new WaitForSeconds(startWait);
        while (true)
        {
            if (enemiesSpawned <= maxEnemy)
            {
                for (int i = 0; i >= enemyCount; i++)
                {
                    Vector3 spawnPosition = new Vector3(Random.Range(-spawnX.position.x, spawnX.position.x), Random.Range(-spawnY.position.y, spawnY.position.y), -3);
                    int enemyIndex = Random.Range(0, enemy.Length);
                    Instantiate(enemy[enemyIndex], spawnPosition, enemy[enemyIndex].transform.rotation);
                    enemiesSpawned++;
                    yield return new WaitForSeconds(spawnWait);
                }
            }
            else
            { }

            //yield return new WaitForSeconds(waveWait);
            
        }
    }

    void SetNextWave()
    {
        wave++;
        enemyCount = enemyCount * wave;
        enemiesSpawned = 0;
        enemiesKilled = 0;
    }

    void GetNextWave()
    {
        SetNextWave();
        StartCoroutine(SpawnWaves());
    }
}

You get the freeze because you have an infinite loop inside your coroutine without a yield statement.

if this if statement inside the coroutine is false:

if (enemiesSpawned <= maxEnemy)

you will not enter the for loop where you have a yield. So the while loop effectively looks like this:

while(true)
{

}

which is an infinite loop without breaking condition. To solve that problem just add at least a yield return null; at the end of your while loop:

while(true)
{
    // your other code
    yield return null;
}