LLVM is switching to use these APIs instead of report_fatal_error. One
unfortunate characteristic of these APIs is that they take Twines and StringRefs
so if one wants to use a type that uses raw_ostream based print APIs, one has to
by hand create a SmallString, create an ostream to put the value into the
SmallString and then call the API. These helpers just perform that initial bit
of work of creating the SmallString and ostream and pass in the ostream to the
callback. After the callback returns, we pass the SmallString to
reportFatal{Internal,Usage}Error.
I also imported the llvm APIs into the swift namespace as well.
llvm::SmallSetVector changed semantics
(https://reviews.llvm.org/D152497) resulting in build failures in Swift.
The old semantics allowed usage of types that did not have an
`operator==` because `SmallDenseSet` uses `DenseSetInfo<T>::isEqual` to
determine equality. The new implementation switched to using
`std::find`, which internally uses `operator==`. This type is used
pretty frequently with `swift::Type`, which intentionally deletes
`operator==` as it is not the canonical type and therefore cannot be
compared in normal circumstances.
This patch adds a new type-alias to the Swift namespace that provides
the old semantic behavior for `SmallSetVector`. I've also gone through
and replaced usages of `llvm::SmallSetVector` with the
`Swift::SmallSetVector` in places where we're storing a type that
doesn't implement or explicitly deletes `operator==`. The changes to
`llvm::SmallSetVector` should improve compile-time performance, so I
left the `llvm::SmallSetVector` where possible.