| // Test that a definition marked with dllexport has default |
| // visibility. |
| // { dg-require-visibility "" } |
| // { dg-require-dll "" } |
| // { dg-options "-fvisibility=hidden" } |
| // { dg-final { scan-not-hidden "_ZN1A1fEv" } } |
| // { dg-final { scan-not-hidden "_Z1gv" } } |
| // { dg-final { scan-not-hidden "_Z1hv" } } |
| // { dg-final { scan-not-hidden "_ZN1BC1Ev" } } |
| // { dg-final { scan-not-hidden "_ZN1BC2Ev" } } |
| // { dg-final { scan-not-hidden "_ZN1BD0Ev" } } |
| // { dg-final { scan-not-hidden "_ZN1BD1Ev" } } |
| // { dg-final { scan-not-hidden "_ZN1BD2Ev" } } |
| // { dg-final { scan-not-hidden "_ZN1B1iEv" } } |
| // { dg-final { scan-not-hidden "_ZN1B1jEv" } } |
| // { dg-final { scan-not-hidden "_ZN1A1a" } } |
| // { dg-final { scan-not-hidden "_ZN1B1b" } } |
| // { dg-final { scan-not-hidden "k" } } |
| // { dg-final { scan-not-hidden "l" } } |
| |
| struct __declspec(dllexport) A { |
| void f(); |
| static int a; |
| }; |
| |
| void A::f() {} |
| |
| int A::a; |
| |
| __declspec(dllexport) void g() {} |
| |
| __declspec(dllexport) void h(); |
| void h() {} |
| |
| struct B { |
| B(); |
| __declspec(dllexport) virtual ~B(); |
| void i(); |
| __declspec(dllexport) void j(); |
| __declspec(dllexport) static int b; |
| }; |
| |
| __declspec(dllexport) B::B() {} |
| |
| B::~B() {} |
| |
| __declspec(dllexport) void B::i() {} |
| |
| void B::j() {} |
| |
| int B::b; |
| |
| __declspec(dllexport) int k; |
| |
| __declspec(dllexport) extern int l; |
| int l; |