1// Test that a definition marked with dllexport has default
2// visibility.
3// { dg-require-visibility "" }
4// { dg-require-dll "" }
5// { dg-options "-fvisibility=hidden" }
6// { dg-final { scan-not-hidden "_ZN1A1fEv" } }
7// { dg-final { scan-not-hidden "_Z1gv" } }
8// { dg-final { scan-not-hidden "_Z1hv" } }
9// { dg-final { scan-not-hidden "_ZN1BC1Ev" } }
10// { dg-final { scan-not-hidden "_ZN1BC2Ev" } }
11// { dg-final { scan-not-hidden "_ZN1BD0Ev" } }
12// { dg-final { scan-not-hidden "_ZN1BD1Ev" } }
13// { dg-final { scan-not-hidden "_ZN1BD2Ev" } }
14// { dg-final { scan-not-hidden "_ZN1B1iEv" } }
15// { dg-final { scan-not-hidden "_ZN1B1jEv" } }
16// { dg-final { scan-not-hidden "_ZN1A1a" } }
17// { dg-final { scan-not-hidden "_ZN1B1b" } }
18// { dg-final { scan-not-hidden "k" } }
19// { dg-final { scan-not-hidden "l" } }
20
21struct __declspec(dllexport) A {
22  void f();
23  static int a;
24};
25
26void A::f() {}
27
28int A::a;
29
30__declspec(dllexport) void g() {}
31
32__declspec(dllexport) void h();
33void h() {}
34
35struct B {
36  B();
37  __declspec(dllexport) virtual ~B();
38  void i();
39  __declspec(dllexport) void j();
40  __declspec(dllexport) static int b;
41};
42
43__declspec(dllexport) B::B() {}
44
45B::~B() {}
46
47__declspec(dllexport) void B::i() {}
48
49void B::j() {}
50
51int B::b;
52
53__declspec(dllexport) int k;
54
55__declspec(dllexport) extern int l;
56int l;
57