In the 2018.x release of Vivado Synthesis, there is a known issue where the synthesizer generates incorrect logic when the state machine has the below transition and coding style.
Here is an example of state a transition graph and its RTL which will trigger this bug in the tool:
Please note that this issue will only occur if the user state transition graph is similar to above state transition graph AND the code is using the below RTL style:
In order to avoid this issue in 2018.x versions, please change the above code to match the following:
This issue has been fixed in the 2019.1 release.