[cfe-dev] Symbol visibility, typedefs and templates
Halfdan Ingvarsson
halfdan at sidefx.com
Fri Jul 25 13:53:49 PDT 2014
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
- ½
More information about the cfe-dev
mailing list