Current CFG is built in non-deterministic order due to the fact that indirect goto labels' declarations (LabelDecl's) are stored in the llvm::SmallSet container. LabelDecl's are pointers, whose order is not deterministic by design, and llvm::SmallSet sorts them by their non-deterministic addresses after "small" container is exceeded. This leads to non-deterministic processing of the elements of the container.
The fix is to use llvm::SmallSetVector, which is deterministic by design.
The introduced test case was creduce'd from Android5 source file.
The test file contains 100 runs, in order to make the testing stable.
This will not work on Windows. However, I don't know the common way of writing tests for determinism. Any ideas?