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 endup 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
It's easier to reason on explicit, pin-point linkage as provided in this patch.
This also paves the way for a more visibility control in all components,
something -fvisibility=hidden doesn't help with.
This has lost the actual namespace name