Fixes a bug causing infinite run when using conditional with empty body #2243
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.
Summary
This PR fixes a bug where using a conditional with an empty body causes an infinite loop when running the simulator.
Fixes #2230
Details and comments
When using a conditional with an empty body, e.g.
The simulator gets stuck in an infinite loop.
It seems the underlying cause of the problem is that when a conditional command has an empty body, it has empty
qargs
list as well. This means that thejump
andmark
commands generated byAer
will have emptyqubits
list and hence after a transpiler pass they may be relocated nondeterministically to any part of the circuit (they are usually placed between two barriers, but without qubits the DAG-to-circuit algorithm will not consider the barriers part of their topological order).The attempted fix is adding
To ensure the commands remain between the barriers.