xref: /llvm-project/clang/test/InstallAPI/hiddens.test (revision 936519f25cb4fabc19f1241e838e938926801156)
1// RUN: rm -rf %t
2// RUN: split-file %s %t
3// RUN: sed -e "s|DSTROOT|%/t|g" %t/inputs.json.in > %t/inputs.json
4
5// RUN: yaml2obj %t/Hidden.yaml -o %t/System/Library/Frameworks/Hidden.framework/Hidden
6
7// RUN: clang-installapi --target=x86_64-apple-macos13 -x objective-c \
8// RUN: -F %t/System/Library/Frameworks \
9// RUN: -install_name /System/Library/Frameworks/Hidden.framework/Versions/A/Hidden\
10// RUN: -current_version 1 -compatibility_version 1 %t/inputs.json \
11// RUN: --verify-against=%t/System/Library/Frameworks/Hidden.framework/Hidden \
12// RUN: --verify-mode=Pedantic -o %t/output.tbd 2>&1 | FileCheck %s
13
14// CHECK-NOT: error
15// CHECK:  warning: use of __private_extern__
16
17// RUN: llvm-readtapi --compare %t/output.tbd %t/expected.tbd
18
19//--- inputs.json.in
20{
21  "headers": [ {
22    "path" : "DSTROOT/System/Library/Frameworks/Hidden.framework/Headers/Hidden.h",
23    "type" : "public"
24  }
25  ],
26  "version": "3"
27}
28
29//--- System/Library/Frameworks/Hidden.framework/Headers/Hidden.h
30__private_extern__ int foo(); // Clang doesn't warn on this, but should.
31__private_extern__ int baz;
32__attribute__((visibility("hidden"))) int bar();
33
34/// Created from:
35/// #import "Hidden.h" int foo(void) { return 1; } int bar(void) { return 1; }
36//--- Hidden.yaml
37--- !mach-o
38FileHeader:
39  magic:           0xFEEDFACF
40  cputype:         0x1000007
41  cpusubtype:      0x3
42  filetype:        0x6
43  ncmds:           12
44  sizeofcmds:      920
45  flags:           0x100085
46  reserved:        0x0
47LoadCommands:
48  - cmd:             LC_SEGMENT_64
49    cmdsize:         312
50    segname:         __TEXT
51    vmaddr:          0
52    vmsize:          8192
53    fileoff:         0
54    filesize:        8192
55    maxprot:         5
56    initprot:        5
57    nsects:          3
58    flags:           0
59    Sections:
60      - sectname:        __text
61        segname:         __TEXT
62        addr:            0xBB8
63        size:            22
64        offset:          0xBB8
65        align:           0
66        reloff:          0x0
67        nreloc:          0
68        flags:           0x80000400
69        reserved1:       0x0
70        reserved2:       0x0
71        reserved3:       0x0
72        content:         554889E5B8010000005DC3554889E5B8010000005DC3
73      - sectname:        __unwind_info
74        segname:         __TEXT
75        addr:            0xBD0
76        size:            4152
77        offset:          0xBD0
78        align:           2
79        reloff:          0x0
80        nreloc:          0
81        flags:           0x0
82        reserved1:       0x0
83        reserved2:       0x0
84        reserved3:       0x0
85        content:         010000001C000000010000002000000000000000200000000200000000000001B80B00003800000038000000CE0B00000000000038000000030000000C0001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
86      - sectname:        __eh_frame
87        segname:         __TEXT
88        addr:            0x1C08
89        size:            24
90        offset:          0x1C08
91        align:           3
92        reloff:          0x0
93        nreloc:          0
94        flags:           0x6000000B
95        reserved1:       0x0
96        reserved2:       0x0
97        reserved3:       0x0
98        content:         1400000000000000017A520001781001100C070890010000
99  - cmd:             LC_SEGMENT_64
100    cmdsize:         152
101    segname:         __DATA_CONST
102    vmaddr:          8192
103    vmsize:          4096
104    fileoff:         8192
105    filesize:        4096
106    maxprot:         3
107    initprot:        3
108    nsects:          1
109    flags:           16
110    Sections:
111      - sectname:        __objc_imageinfo
112        segname:         __DATA_CONST
113        addr:            0x2000
114        size:            8
115        offset:          0x2000
116        align:           0
117        reloff:          0x0
118        nreloc:          0
119        flags:           0x0
120        reserved1:       0x0
121        reserved2:       0x0
122        reserved3:       0x0
123        content:         '0000000040000000'
124  - cmd:             LC_SEGMENT_64
125    cmdsize:         72
126    segname:         __LINKEDIT
127    vmaddr:          12288
128    vmsize:          104
129    fileoff:         12288
130    filesize:        104
131    maxprot:         1
132    initprot:        1
133    nsects:          0
134    flags:           0
135  - cmd:             LC_DYLD_INFO_ONLY
136    cmdsize:         48
137    rebase_off:      0
138    rebase_size:     0
139    bind_off:        0
140    bind_size:       0
141    weak_bind_off:   0
142    weak_bind_size:  0
143    lazy_bind_off:   0
144    lazy_bind_size:  0
145    export_off:      12288
146    export_size:     16
147  - cmd:             LC_SYMTAB
148    cmdsize:         24
149    symoff:          12312
150    nsyms:           3
151    stroff:          12360
152    strsize:         32
153  - cmd:             LC_DYSYMTAB
154    cmdsize:         80
155    ilocalsym:       0
156    nlocalsym:       1
157    iextdefsym:      1
158    nextdefsym:      1
159    iundefsym:       2
160    nundefsym:       1
161    tocoff:          0
162    ntoc:            0
163    modtaboff:       0
164    nmodtab:         0
165    extrefsymoff:    0
166    nextrefsyms:     0
167    indirectsymoff:  0
168    nindirectsyms:   0
169    extreloff:       0
170    nextrel:         0
171    locreloff:       0
172    nlocrel:         0
173  - cmd:             LC_ID_DYLIB
174    cmdsize:         88
175    dylib:
176      name:            24
177      timestamp:       0
178      current_version: 65536
179      compatibility_version: 65536
180    Content:         '/System/Library/Frameworks/Hidden.framework/Versions/A/Hidden'
181    ZeroPadBytes:    3
182  - cmd:             LC_UUID
183    cmdsize:         24
184    uuid:            4C4C44E7-5555-3144-A133-0271E799C487
185  - cmd:             LC_BUILD_VERSION
186    cmdsize:         32
187    platform:        1
188    minos:           851968
189    sdk:             983040
190    ntools:          1
191    Tools:
192      - tool:            4
193        version:         1245184
194  - cmd:             LC_LOAD_DYLIB
195    cmdsize:         56
196    dylib:
197      name:            24
198      timestamp:       0
199      current_version: 88473600
200      compatibility_version: 65536
201    Content:         '/usr/lib/libSystem.B.dylib'
202    ZeroPadBytes:    6
203  - cmd:             LC_FUNCTION_STARTS
204    cmdsize:         16
205    dataoff:         12304
206    datasize:        8
207  - cmd:             LC_DATA_IN_CODE
208    cmdsize:         16
209    dataoff:         12312
210    datasize:        0
211LinkEditData:
212  ExportTrie:
213    TerminalSize:    0
214    NodeOffset:      0
215    Name:            ''
216    Flags:           0x0
217    Address:         0x0
218    Other:           0x0
219    ImportName:      ''
220    Children:
221      - TerminalSize:    3
222        NodeOffset:      8
223        Name:            _foo
224        Flags:           0x0
225        Address:         0xBB8
226        Other:           0x0
227        ImportName:      ''
228  NameList:
229    - n_strx:          7
230      n_type:          0x1E
231      n_sect:          1
232      n_desc:          0
233      n_value:         3011
234    - n_strx:          2
235      n_type:          0xF
236      n_sect:          1
237      n_desc:          0
238      n_value:         3000
239    - n_strx:          12
240      n_type:          0x1
241      n_sect:          0
242      n_desc:          256
243      n_value:         0
244  StringTable:
245    - ' '
246    - _foo
247    - _bar
248    - dyld_stub_binder
249    - ''
250    - ''
251    - ''
252  FunctionStarts:  [ 0xBB8, 0xBC3 ]
253...
254
255//--- expected.tbd
256--- !tapi-tbd
257tbd-version:     4
258targets:         [ x86_64-macos ]
259flags:           [ not_app_extension_safe ]
260install-name:    '/System/Library/Frameworks/Hidden.framework/Versions/A/Hidden'
261...
262
263