Setting -fvisibility=hidden when compiling Target libs has the advantage of
not being intrusive on the codebase, but it also sets the visibility of all
functions within header-only component like ADT. In the end, we end up with
some symbols with hidden visibility within llvm dylib (through the target libs),
and some with external visibility (through other libs). This paves the way for
subtle bugs like https://reviews.llvm.org/D101972
This patch explicitly set the visibility of some classes to default so that
llvm::Any related symbols keep a default visibility. Indeed a template
function with default visibility parametrized by a type with hidden
visibility is granted hidden visibility, and we don't want this for the
uniqueness of llvm::Any::TypeId.