Fix infinite loop bug(s) in recursion checking #234
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The first commit is just a minor reordering to 1. Prepare to totally rewrite search_for_recursion() on top of the call tree added recently and 2. Delay the performance hit associated with it until later, in case there are errors earlier in compilation.
The second commit turns the infinite loop we were seeing on alias conflicts into an internal error. This should help detect any future bugs in this area more easily.
The final commit is the real fix, which checks for alias conflicts and reports an error. The error handling is an extremely awkward dance with a performance hit, as described in the commit message. We should get everything back in terms of both code complexity and performance once we implement #219.