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