| // RUN: rm -rf %t |
| // RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing -triple arm64-apple-macosx \ |
| // RUN: -x objective-c-header %s -o %t/output.symbols.json -verify |
| |
| |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix A |
| __attribute__((availability(macos, introduced=9.0, deprecated=12.0, obsoleted=20.0))) |
| @interface A |
| // A-LABEL: "!testLabel": "c:objc(cs)A" |
| // A: "availability": [ |
| // A-NEXT: { |
| // A-NEXT: "deprecated": { |
| // A-NEXT: "major": 12, |
| // A-NEXT: "minor": 0, |
| // A-NEXT: "patch": 0 |
| // A-NEXT: } |
| // A-NEXT: "domain": "macos" |
| // A-NEXT: "introduced": { |
| // A-NEXT: "major": 9, |
| // A-NEXT: "minor": 0, |
| // A-NEXT: "patch": 0 |
| // A-NEXT: } |
| // A-NEXT: "obsoleted": { |
| // A-NEXT: "major": 20, |
| // A-NEXT: "minor": 0, |
| // A-NEXT: "patch": 0 |
| // A-NEXT: } |
| // A-NEXT: } |
| // A-NEXT: ] |
| |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix CP |
| @property(class) int CP; |
| // CP-LABEL: "!testLabel": "c:objc(cs)A(cpy)CP" |
| // CP: "availability": [ |
| // CP-NEXT: { |
| // CP-NEXT: "deprecated": { |
| // CP-NEXT: "major": 12, |
| // CP-NEXT: "minor": 0, |
| // CP-NEXT: "patch": 0 |
| // CP-NEXT: } |
| // CP-NEXT: "domain": "macos" |
| // CP-NEXT: "introduced": { |
| // CP-NEXT: "major": 9, |
| // CP-NEXT: "minor": 0, |
| // CP-NEXT: "patch": 0 |
| // CP-NEXT: } |
| // CP-NEXT: "obsoleted": { |
| // CP-NEXT: "major": 20, |
| // CP-NEXT: "minor": 0, |
| // CP-NEXT: "patch": 0 |
| // CP-NEXT: } |
| // CP-NEXT: } |
| // CP-NEXT: ] |
| |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix IP |
| @property int IP; |
| // IP-LABEL: "!testLabel": "c:objc(cs)A(py)IP" |
| // IP: "availability": [ |
| // IP-NEXT: { |
| // IP-NEXT: "deprecated": { |
| // IP-NEXT: "major": 12, |
| // IP-NEXT: "minor": 0, |
| // IP-NEXT: "patch": 0 |
| // IP-NEXT: } |
| // IP-NEXT: "domain": "macos" |
| // IP-NEXT: "introduced": { |
| // IP-NEXT: "major": 9, |
| // IP-NEXT: "minor": 0, |
| // IP-NEXT: "patch": 0 |
| // IP-NEXT: } |
| // IP-NEXT: "obsoleted": { |
| // IP-NEXT: "major": 20, |
| // IP-NEXT: "minor": 0, |
| // IP-NEXT: "patch": 0 |
| // IP-NEXT: } |
| // IP-NEXT: } |
| // IP-NEXT: ] |
| |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix MR |
| @property int moreRestrictive __attribute__((availability(macos, introduced=10.0, deprecated=11.0, obsoleted=19.0))); |
| // MR-LABEL: "!testLabel": "c:objc(cs)A(py)moreRestrictive" |
| // MR: "availability": [ |
| // MR-NEXT: { |
| // MR-NEXT: "deprecated": { |
| // MR-NEXT: "major": 11, |
| // MR-NEXT: "minor": 0, |
| // MR-NEXT: "patch": 0 |
| // MR-NEXT: } |
| // MR-NEXT: "domain": "macos" |
| // MR-NEXT: "introduced": { |
| // MR-NEXT: "major": 10, |
| // MR-NEXT: "minor": 0, |
| // MR-NEXT: "patch": 0 |
| // MR-NEXT: } |
| // MR-NEXT: "obsoleted": { |
| // MR-NEXT: "major": 19, |
| // MR-NEXT: "minor": 0, |
| // MR-NEXT: "patch": 0 |
| // MR-NEXT: } |
| // MR-NEXT: } |
| // MR-NEXT: ] |
| |
| @end |
| |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix B |
| __attribute__((deprecated("B is deprecated"))) |
| @interface B |
| // B-LABEL: "!testLabel": "c:objc(cs)B" |
| // B: "availability": [ |
| // B-NEXT: { |
| // B-NEXT: "domain": "*" |
| // B-NEXT: "isUnconditionallyDeprecated": true |
| // B-NEXT: } |
| // B-NEXT: ] |
| |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix BIP |
| @property int BIP; |
| // BIP-LABEL: "!testLabel": "c:objc(cs)B(py)BIP" |
| // BIP: "availability": [ |
| // BIP-NEXT: { |
| // BIP-NEXT: "domain": "*" |
| // BIP-NEXT: "isUnconditionallyDeprecated": true |
| // BIP-NEXT: } |
| // BIP-NEXT: ] |
| @end |
| |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix C |
| __attribute__((availability(macos, unavailable))) |
| @interface C |
| // C-LABEL: "!testLabel": "c:objc(cs)C" |
| // C: "availability": [ |
| // C-NEXT: { |
| // C-NEXT: "domain": "macos" |
| // C-NEXT: "isUnconditionallyUnavailable": true |
| // C-NEXT: } |
| // C-NEXT: ] |
| |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix CIP |
| @property int CIP; |
| // CIP-LABEL: "!testLabel": "c:objc(cs)C(py)CIP" |
| // CIP: "availability": [ |
| // CIP-NEXT: { |
| // CIP-NEXT: "domain": "macos" |
| // CIP-NEXT: "isUnconditionallyUnavailable": true |
| // CIP-NEXT: } |
| // CIP-NEXT: ] |
| @end |
| |
| @interface D |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix DIP |
| @property int DIP __attribute__((availability(macos, introduced=10.0, deprecated=11.0, obsoleted=19.0))); |
| // DIP-LABEL: "!testLabel": "c:objc(cs)D(py)DIP" |
| // DIP: "availability": [ |
| // DIP-NEXT: { |
| // DIP-NEXT: "deprecated": { |
| // DIP-NEXT: "major": 11, |
| // DIP-NEXT: "minor": 0, |
| // DIP-NEXT: "patch": 0 |
| // DIP-NEXT: } |
| // DIP-NEXT: "domain": "macos" |
| // DIP-NEXT: "introduced": { |
| // DIP-NEXT: "major": 10, |
| // DIP-NEXT: "minor": 0, |
| // DIP-NEXT: "patch": 0 |
| // DIP-NEXT: } |
| // DIP-NEXT: "obsoleted": { |
| // DIP-NEXT: "major": 19, |
| // DIP-NEXT: "minor": 0, |
| // DIP-NEXT: "patch": 0 |
| // DIP-NEXT: } |
| // DIP-NEXT: } |
| // DIP-NEXT: ] |
| @end |
| |
| // expected-no-diagnostics |