r194296 - Use rauw for all discardable aliases, not just linkonce_odr.
Rafael EspĂndola
rafael.espindola at gmail.com
Fri Nov 22 10:34:05 PST 2013
> Right now ~moneypunct_byname() is attributed with __always_inline__, meaning it should never be part of libc++.dylib. That being said, moneypunct_byname is also extern templates for the required instantiations, and there is a poorly understood bad interaction between __always_inline__ and extern template. That could very well be at the base of this problem here.
>
> If I'm remembering correctly, it goes something like: If something is marked __always_inline__, it doesn't get outlined when the templated is explicitly instantiated into a source (which I believe is correct behavior). However when the client needs an __always_inline__ and the type is marked extern template, the client assumes it can find the symbol outlined elsewhere (which I believe is incorrect behavior).
No, code is produce when we do an explicit template instantiation.
template<typename T>
struct foo {
__attribute__((always_inline))void f() {
}
};
template struct foo<int>;
produces:
define weak_odr void @_ZN3fooIiE1fEv
with a alwaysinline attribute.
I think we have to do this, since someone can take a function pointer
to f, in which case always_inline fails. We will avoid the
optimization that made the problem more visible for now, but we should
probably figure out a better way to get the desired effect in libc++.
>
> I may be remembering incorrectly...
>
> Howard
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list