summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/ext/visibility/arm3.C
blob: 9be7082ce1ddba0080de0cd0d1aeb1adbeec89da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// { dg-do compile { target arm*-*-*eabi* } }
// { dg-require-dll "" }
// { dg-options "-fvisibility=hidden" }

/* From ARM C++ ABI \S 3.2.5.5:

     A class should be exported unless explicitly tagged otherwise.

   This admonition applies even on DLL-based systems where hidden
   visibility is the default.  We want -fvisibility=hidden to behave
   identically to the situation where hidden visibility is the
   hard-wired default.  So, both A and B are exported classes.

   Furthermore:

     If CAG symbol Y names one of the impedimenta associated with an
     exported class X:

     ... 

     * Otherwise, if X has no key function:
     
       - Y is exported from ... each DLL that refers to X and uses Y.

   So, the type-info and virtual-table symbols associated with A and B
   must be exported.  */

// { dg-final { scan-not-hidden "_ZTI1A" } }
// { dg-final { scan-not-hidden "_ZTS1A" } }
// { dg-final { scan-not-hidden "_ZTV1B" } }
// { dg-final { scan-not-hidden "_ZTI1B" } }
// { dg-final { scan-not-hidden "_ZTS1B" } }

struct A {};
struct B : virtual public A {};
B b;