| // RUN: %clang_cc1 -fsyntax-only -Wdeprecated-implementations -verify -Wno-objc-root-class %s |
| // rdar://8973810 |
| // rdar://12717705 |
| |
| @protocol P |
| - (void) D __attribute__((deprecated)); // expected-note {{method 'D' declared here}} |
| @end |
| |
| @interface A <P> |
| + (void)F __attribute__((deprecated)); |
| @end |
| |
| @interface A() |
| - (void) E __attribute__((deprecated)); |
| @end |
| |
| @implementation A |
| + (void)F { } // No warning, implementing its own deprecated method |
| - (void) D {} // expected-warning {{Implementing deprecated method}} |
| - (void) E {} // No warning, implementing deprecated method in its class extension. |
| @end |
| |
| @interface A(CAT) |
| - (void) G __attribute__((deprecated)); |
| @end |
| |
| @implementation A(CAT) |
| - (void) G {} // No warning, implementing its own deprecated method |
| @end |
| |
| __attribute__((deprecated)) |
| @interface CL // expected-note 2 {{class declared here}} // expected-note 2 {{'CL' has been explicitly marked deprecated here}} |
| @end |
| |
| @implementation CL // expected-warning {{Implementing deprecated class}} |
| @end |
| |
| @implementation CL ( SomeCategory ) // expected-warning {{'CL' is deprecated}} \ |
| // expected-warning {{Implementing deprecated category}} |
| @end |
| |
| @interface CL_SUB : CL // expected-warning {{'CL' is deprecated}} |
| @end |
| |
| @interface BASE |
| - (void) B __attribute__((deprecated)); // expected-note {{method 'B' declared here}} |
| @end |
| |
| @interface SUB : BASE |
| @end |
| |
| @implementation SUB |
| - (void) B {} // expected-warning {{Implementing deprecated method}} |
| @end |
| |
| @interface Test |
| @end |
| |
| @interface Test() |
| - (id)initSpecialInPrivateHeader __attribute__((deprecated)); |
| @end |
| |
| @implementation Test |
| - (id)initSpecialInPrivateHeader { |
| return (void *)0; |
| } |
| @end |