[cfe-dev] Symbol visibility, typedefs and templates

Halfdan Ingvarsson halfdan at sidefx.com
Thu Aug 21 09:21:50 PDT 2014


Ping?

On 14-07-25 04:53 PM, Halfdan Ingvarsson wrote:
> Hello
>
> I'm running into symbol visibility issues with clang trunk (213949).
>
> I have a template class that gets specialized for symbol export 
> (visibility attribute = default), but it is type-dependent on another 
> template class, which is fully inlined and so doesn't have the 
> visibility attribute. If I compile to a DSO with -fvisibility=hidden, 
> the specialized member functions do not get exported, unless I mark 
> the dependent class as exported as well.
>
> Is this a bug or the expected behaviour?  This seems to work fine in 
> gcc 4.8, without specifically exporting the first template. If it's a 
> bug, I'll open one up.
>
> So far, I've been unable to find online any document on the 
> composability rules of symbol export with regards to nested templates. 
> Does such a document exist?
>
> Sample code:
>
> /// ---------------- test.C ------------
> #define EXPORT __attribute__((visibility("default")))
>
> // Remove the comment around EXPORT to make this behave
> template <typename T> class /* EXPORT */ val_array { };
>
> typedef val_array<float> val_array_f;
>
> template <typename T>
> struct handle
> {
>     handle();
> };
>
> template <typename T>
> handle<T>::handle()
> {
> }
>
> template EXPORT handle<val_array_f>::handle();
> /// --------------------------------
>
> > clang++ -fPIC -shared -fvisibility=hidden -o test.so test.C
> > objdump -TC test.so | grep handle || echo NOTFOUND
>
>  - ½
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev




More information about the cfe-dev mailing list