[cfe-dev] Clang disagrees with gcc at the intersection of explicit template instantiations and visibility
Keno Fischer via cfe-dev
cfe-dev at lists.llvm.org
Sat Oct 3 16:08:59 PDT 2015
Hi folks,
I've been looking at explicit template instantiations lately, and came
across the following
corner case where gcc and clang disagree on the visibility of a symbol. I'm
inclined to think gcc's behavior is correct, but I wanted to make sure I'm
not missing some reason why AddS needs to be visible.
Consider the following file (test.cpp):
template < typename T > class foo {
public:
T x;
T getX() { return x; }
template < typename S >
__attribute__ ((visibility("hidden"))) S AddS(S);
};
__attribute__ ((visibility("hidden"))) S foo<T>::AddS(S y) {
return ((S) x) + y;
}
template < typename T, typename S >
__attribute__ ((visibility("hidden"))) S AddTS(T x, S y) {
return ((S) x) + y;
}
extern template struct foo<int>;
template struct foo<int>;
int footest() {
auto var = foo<int>{5};
auto bar = var.AddS((long long)3);
auto bar2 = AddTS((int)5,(long long)3);
return var.getX();
}
$ gcc -std=c++11 -c -S -o - test.cpp | grep .hidden
.hidden _ZN3fooIiE4AddSIxEET_S2_
.hidden _Z5AddTSIixET0_T_S0_
$ clang-3.5 -std=c++11 -c -S -o - test.cpp | grep .hidden
.hidden _Z5AddTSIixET0_T_S0_
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20151003/582d9bcc/attachment.html>
More information about the cfe-dev
mailing list