| // RUN: %clang_cc1 %s -fsyntax-only -Wobjc-property-implementation -Watomic-property-with-user-defined-accessor -Wunused 2> %t.err |
| // RUN: FileCheck -input-file=%t.err %s |
| |
| @interface I |
| @end |
| |
| @interface I(cat) |
| @property id prop1; |
| @property id prop2; |
| @property id prop3; |
| @end |
| |
| @implementation I(cat) |
| @end |
| |
| // CHECK: warning: property 'prop1' requires method |
| // CHECK: warning: property 'prop2' requires method |
| // CHECK: warning: property 'prop3' requires method |
| |
| @interface I2 |
| @property int prop1; |
| @property int prop2; |
| @property int prop3; |
| @end |
| |
| @implementation I2 |
| @synthesize prop1, prop2, prop3; |
| -(int) prop1 { return 0; } |
| -(int) prop2 { return 0; } |
| -(int) prop3 { return 0; } |
| @end |
| |
| // CHECK: warning: writable atomic property 'prop1' |
| // CHECK: warning: writable atomic property 'prop2' |
| // CHECK: warning: writable atomic property 'prop3' |
| |
| void test_unused() { |
| // Add enough variables to exceed the small storage of Scope::DeclSetTy. |
| int v1; |
| int v2; |
| int v3; |
| int v4; |
| int v5; |
| int v6; |
| int v7; |
| int v8; |
| int v9; |
| int v10; |
| int v11; |
| int v12; |
| int v13; |
| int v14; |
| int v15; |
| int v16; |
| int v17; |
| int v18; |
| int v19; |
| int v20; |
| int v21; |
| int v22; |
| int v23; |
| int v24; |
| int v25; |
| int v26; |
| int v27; |
| int v28; |
| int v29; |
| int v30; |
| int v31; |
| int v32; |
| int v33; |
| int v34; |
| int v35; |
| int v36; |
| int v37; |
| int v38; |
| } |
| |
| // CHECK: warning: unused variable 'v1' |
| // CHECK: warning: unused variable 'v2' |
| // CHECK: warning: unused variable 'v3' |
| // CHECK: warning: unused variable 'v4' |
| // CHECK: warning: unused variable 'v5' |
| // CHECK: warning: unused variable 'v6' |
| // CHECK: warning: unused variable 'v7' |
| // CHECK: warning: unused variable 'v8' |
| // CHECK: warning: unused variable 'v9' |
| // CHECK: warning: unused variable 'v10' |
| // CHECK: warning: unused variable 'v11' |
| // CHECK: warning: unused variable 'v12' |
| // CHECK: warning: unused variable 'v13' |
| // CHECK: warning: unused variable 'v14' |
| // CHECK: warning: unused variable 'v15' |
| // CHECK: warning: unused variable 'v16' |
| // CHECK: warning: unused variable 'v17' |
| // CHECK: warning: unused variable 'v18' |
| // CHECK: warning: unused variable 'v19' |
| // CHECK: warning: unused variable 'v20' |
| // CHECK: warning: unused variable 'v21' |
| // CHECK: warning: unused variable 'v22' |
| // CHECK: warning: unused variable 'v23' |
| // CHECK: warning: unused variable 'v24' |
| // CHECK: warning: unused variable 'v25' |
| // CHECK: warning: unused variable 'v26' |
| // CHECK: warning: unused variable 'v27' |
| // CHECK: warning: unused variable 'v28' |
| // CHECK: warning: unused variable 'v29' |
| // CHECK: warning: unused variable 'v30' |
| // CHECK: warning: unused variable 'v31' |
| // CHECK: warning: unused variable 'v32' |
| // CHECK: warning: unused variable 'v33' |
| // CHECK: warning: unused variable 'v34' |
| // CHECK: warning: unused variable 'v35' |
| // CHECK: warning: unused variable 'v36' |
| // CHECK: warning: unused variable 'v37' |
| // CHECK: warning: unused variable 'v38' |