librustc: Make sure to run destructors in the right order when matching on moved value.

Inadvertently changed the order in which destructors ran in certain cases with #15076.

Fixes #15438.
How does this test actually verify that? It seems like you'd need some state in `X` to track which value is which, or else you'll end up with the same output in `ORDER` regardless of the order of destruction.