xref: /llvm-project/clang/test/ExtractAPI/availability.c (revision 05c1447b3eabe9cc4a27866094e46c57350c5d5a)
157c9780dSDaniel Grumberg // RUN: rm -rf %t
2*05c1447bSDaniel Grumberg // RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing -triple arm64-apple-macosx \
3*05c1447bSDaniel Grumberg // RUN:   -x c-header %s -o %t/output.symbols.json -verify
457c9780dSDaniel Grumberg 
5*05c1447bSDaniel Grumberg // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix A
6*05c1447bSDaniel Grumberg void a(void) __attribute__((availability(macos, introduced=12.0)));
7*05c1447bSDaniel Grumberg // A-LABEL: "!testLabel": "c:@F@a"
8*05c1447bSDaniel Grumberg // A:      "availability": [
9*05c1447bSDaniel Grumberg // A-NEXT:   {
10*05c1447bSDaniel Grumberg // A-NEXT:     "domain": "macos",
11*05c1447bSDaniel Grumberg // A-NEXT:     "introduced": {
12*05c1447bSDaniel Grumberg // A-NEXT:       "major": 12,
13*05c1447bSDaniel Grumberg // A-NEXT:       "minor": 0,
14*05c1447bSDaniel Grumberg // A-NEXT:       "patch": 0
15*05c1447bSDaniel Grumberg // A-NEXT:     }
16*05c1447bSDaniel Grumberg // A-NEXT:   }
17*05c1447bSDaniel Grumberg // A-NEXT: ]
1857c9780dSDaniel Grumberg 
19*05c1447bSDaniel Grumberg // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix B
20*05c1447bSDaniel Grumberg void b(void) __attribute__((availability(macos, introduced=11.0, deprecated=12.0, obsoleted=20.0)));
21*05c1447bSDaniel Grumberg // B-LABEL: "!testLabel": "c:@F@b"
22*05c1447bSDaniel Grumberg // B:      "availability": [
23*05c1447bSDaniel Grumberg // B-NEXT:   {
24*05c1447bSDaniel Grumberg // B-NEXT:     "deprecated": {
25*05c1447bSDaniel Grumberg // B-NEXT:       "major": 12,
26*05c1447bSDaniel Grumberg // B-NEXT:       "minor": 0,
27*05c1447bSDaniel Grumberg // B-NEXT:       "patch": 0
28*05c1447bSDaniel Grumberg // B-NEXT:     },
29*05c1447bSDaniel Grumberg // B-NEXT:     "domain": "macos",
30*05c1447bSDaniel Grumberg // B-NEXT:     "introduced": {
31*05c1447bSDaniel Grumberg // B-NEXT:       "major": 11,
32*05c1447bSDaniel Grumberg // B-NEXT:       "minor": 0,
33*05c1447bSDaniel Grumberg // B-NEXT:       "patch": 0
34*05c1447bSDaniel Grumberg // B-NEXT:     },
35*05c1447bSDaniel Grumberg // B-NEXT:     "obsoleted": {
36*05c1447bSDaniel Grumberg // B-NEXT:       "major": 20,
37*05c1447bSDaniel Grumberg // B-NEXT:       "minor": 0,
38*05c1447bSDaniel Grumberg // B-NEXT:       "patch": 0
39*05c1447bSDaniel Grumberg // B-NEXT:     }
40*05c1447bSDaniel Grumberg // B-NEXT:   }
41*05c1447bSDaniel Grumberg // B-NEXT: ]
4257c9780dSDaniel Grumberg 
43*05c1447bSDaniel Grumberg // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix E
44*05c1447bSDaniel Grumberg void c(void) __attribute__((availability(macos, introduced=11.0, deprecated=12.0, obsoleted=20.0))) __attribute__((availability(ios, introduced=13.0)));
45*05c1447bSDaniel Grumberg // C-LABEL: "!testLabel": "c:@F@c"
46*05c1447bSDaniel Grumberg // C:       "availability": [
47*05c1447bSDaniel Grumberg // C-NEXT:    {
48*05c1447bSDaniel Grumberg // C-NEXT:      "deprecated": {
49*05c1447bSDaniel Grumberg // C-NEXT:        "major": 12,
50*05c1447bSDaniel Grumberg // C-NEXT:        "minor": 0,
51*05c1447bSDaniel Grumberg // C-NEXT:        "patch": 0
52*05c1447bSDaniel Grumberg // C-NEXT:      },
53*05c1447bSDaniel Grumberg // C-NEXT:      "domain": "macos",
54*05c1447bSDaniel Grumberg // C-NEXT:      "introduced": {
55*05c1447bSDaniel Grumberg // C-NEXT:        "major": 11,
56*05c1447bSDaniel Grumberg // C-NEXT:        "minor": 0,
57*05c1447bSDaniel Grumberg // C-NEXT:        "patch": 0
58*05c1447bSDaniel Grumberg // C-NEXT:      },
59*05c1447bSDaniel Grumberg // C-NEXT:      "obsoleted": {
60*05c1447bSDaniel Grumberg // C-NEXT:        "major": 20,
61*05c1447bSDaniel Grumberg // C-NEXT:        "minor": 0,
62*05c1447bSDaniel Grumberg // C-NEXT:        "patch": 0
63*05c1447bSDaniel Grumberg // C-NEXT:      }
64*05c1447bSDaniel Grumberg // C-NEXT:    }
65*05c1447bSDaniel Grumberg // C-NEXT: ]
6657c9780dSDaniel Grumberg 
67*05c1447bSDaniel Grumberg // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix D
68*05c1447bSDaniel Grumberg void d(void) __attribute__((deprecated)) __attribute__((availability(macos, introduced=11.0)));
69*05c1447bSDaniel Grumberg // D-LABEL: "!testLabel": "c:@F@d"
70*05c1447bSDaniel Grumberg // D:      "availability": [
71*05c1447bSDaniel Grumberg // D-NEXT:   {
72*05c1447bSDaniel Grumberg // D-NEXT:     "domain": "*",
73*05c1447bSDaniel Grumberg // D-NEXT:     "isUnconditionallyDeprecated": true
74*05c1447bSDaniel Grumberg // D-NEXT:   },
75*05c1447bSDaniel Grumberg // D-NEXT:   {
76*05c1447bSDaniel Grumberg // D-NEXT:     "domain": "macos",
77*05c1447bSDaniel Grumberg // D-NEXT:     "introduced": {
78*05c1447bSDaniel Grumberg // D-NEXT:       "major": 11,
79*05c1447bSDaniel Grumberg // D-NEXT:       "minor": 0,
80*05c1447bSDaniel Grumberg // D-NEXT:       "patch": 0
81*05c1447bSDaniel Grumberg // D-NEXT:     }
82*05c1447bSDaniel Grumberg // D-NEXT:   }
83*05c1447bSDaniel Grumberg // D-NEXT: ]
8457c9780dSDaniel Grumberg 
85*05c1447bSDaniel Grumberg // This symbol should be dropped as it's unconditionally unavailable
86*05c1447bSDaniel Grumberg // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix E
87*05c1447bSDaniel Grumberg void e(void) __attribute__((unavailable)) __attribute__((availability(macos, introduced=11.0)));
88*05c1447bSDaniel Grumberg // E-NOT: "!testLabel": "c:@F@e"
8957c9780dSDaniel Grumberg 
90*05c1447bSDaniel Grumberg // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix F
91*05c1447bSDaniel Grumberg void f(void) __attribute__((availability(macos, unavailable)));
92*05c1447bSDaniel Grumberg // F-LABEL: "!testLabel": "c:@F@f"
93*05c1447bSDaniel Grumberg // F:      "availability": [
94*05c1447bSDaniel Grumberg // F-NEXT:   {
95*05c1447bSDaniel Grumberg // F-NEXT:     "domain": "macos",
96*05c1447bSDaniel Grumberg // F-NEXT:     "isUnconditionallyUnavailable": true
97*05c1447bSDaniel Grumberg // F-NEXT:   }
98*05c1447bSDaniel Grumberg // F-NEXT: ]
9957c9780dSDaniel Grumberg 
100*05c1447bSDaniel Grumberg // expected-no-diagnostics
10157c9780dSDaniel Grumberg 
102