This is a no-functional-change part of the next patch.
The checker supports 5 different sorts of "use" after move: copying, moving, copy-assigning from, move-assigning from, calling any other method. De-duplicate the common checks that repeat 5 times into a single method, checkUse().
Re-structure the code a little bit.
I think that if the function is named "checkUse()", committing State changes is not what is really expected from it. Should we rename it or change the logic somehow? For example, return true if a report was emitted and add transition in the caller?