def err_property_type : Error<"property cannot have array or function type %0">;
def error_missing_property_context : Error<
"missing context for property implementation declaration">;
-def error_property_after_method_impl : Error<
- "property implementation declaration after method or function definition">;
-def warn_property_after_method_impl : Warning<
- "property implementation declaration after method or function definition">;
def error_bad_property_decl : Error<
"property implementation must have its declaration in interface %0">;
def error_category_property : Error<
return 0;
}
}
- if ((IC->meth_begin() != IC->meth_end()) && AtLoc.isValid()) {
- if (getLangOptions().ObjCAutoRefCount)
- Diag(AtLoc, diag::error_property_after_method_impl);
- else
- Diag(AtLoc, diag::warn_property_after_method_impl);
- ObjCMethodDecl *method = *(IC->meth_begin());
- Diag(method->getLocation(), diag::note_method_declared_at);
- }
} else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {
if (Synthesize) {
Diag(AtLoc, diag::error_synthesize_category_decl);
@end
@implementation Bar
-@synthesize a;
- (void) dealloc {
[self setA:0]; // This is user-defined setter overriding synthesize, don't touch it.
self.a.x = 0; // every dealloc must zero out its own ivar. This patter is not recognized.
}
+@synthesize a;
- (void) setA:(Foo*) val { }
- (id) a {return 0;}
@end
@end
@implementation Bar
-@synthesize a;
- (void) dealloc {
[self setA:0]; // This is user-defined setter overriding synthesize, don't touch it.
self.a.x = 0; // every dealloc must zero out its own ivar. This patter is not recognized.
}
+@synthesize a;
- (void) setA:(Foo*) val { }
- (id) a {return 0;}
@end
@synthesize newName;
@synthesize newName1;
-- (id) newName1 { return 0; } // expected-note {{method declared here}}
+- (id) newName1 { return 0; }
-@synthesize newName2; // expected-error {{property implementation declaration after method or function definition}}
+@synthesize newName2;
@end
void test35(void) {
// RUN: %clang_cc1 -fsyntax-only -verify %s
-// XFAIL: *
/*
Conditions for warning:
// rdar://9027673
// Warning on future name lookup rule is removed.
@implementation I
-@synthesize glob;
-@dynamic p;
-@dynamic le;
-@dynamic l;
-@dynamic ls;
-@dynamic r;
- (int) Meth { return glob; } // no warning
+@synthesize glob;
// rdar://8248681
- (int) Meth1: (int) p {
extern int le;
p = le + ls + r;
return l;
}
+@dynamic p;
+@dynamic le;
+@dynamic l;
+@dynamic ls;
+@dynamic r;
@end
@end
@implementation D
-@synthesize PROP=IVAR;
- (int) Meth { return self.PROP; }
+@synthesize PROP=IVAR;
@end
@synthesize newName;
@synthesize newName1;
-@synthesize newName2;
- (id) newName1 { return 0; }
+@synthesize newName2;
@end
@synthesize foo = _foo;
@synthesize foo1;
-- (void)setFoo:(int)value { // expected-note 3 {{method declared here}}
+- (void)setFoo:(int)value {
_foo = foo; // expected-error {{use of undeclared identifier 'foo'}}
}
_foo = foo3; // OK
}
-@synthesize foo2 = _foo2; // expected-warning {{property implementation declaration after method or function definition}}
-@synthesize foo3; // expected-warning {{property implementation declaration after method or function definition}}
+@synthesize foo2 = _foo2;
+@synthesize foo3;
-@synthesize PROP=PROP; // expected-warning {{property implementation declaration after method or function definition}}
+@synthesize PROP=PROP;
- (void)setPROP:(int)value {
PROP = PROP; // OK
}
@end
@implementation I
-- (int) Meth { return PROP; } // expected-note 2{{'PROP' declared here}} \
- // expected-note 5{{method declared here}}
+- (int) Meth { return PROP; } // expected-note 2{{'PROP' declared here}}
-@dynamic PROP1; // expected-warning {{property implementation declaration after method or function definition}}
+@dynamic PROP1;
- (int) Meth1 { return PROP1; } // expected-error {{use of undeclared identifier 'PROP1'}}
- (int) Meth2 { return PROP2; } // expected-error {{use of undeclared identifier 'PROP2'}}
-@dynamic PROP2; // expected-warning {{property implementation declaration after method or function definition}}
+@dynamic PROP2;
- (int) Meth3 { return PROP3; } // expected-error {{use of undeclared identifier 'PROP3'}}
-@synthesize PROP3=IVAR; // expected-warning {{property implementation declaration after method or function definition}}
+@synthesize PROP3=IVAR;
- (int) Meth4 { return PROP4; }
-@synthesize PROP4=PROP4; // expected-warning {{property implementation declaration after method or function definition}}
+@synthesize PROP4=PROP4;
- (int) Meth5 { return bar; } // expected-error {{use of undeclared identifier 'bar'}}
-@synthesize bar = _bar; // expected-warning {{property implementation declaration after method or function definition}}
+@synthesize bar = _bar;
- (int) Meth6 { return bar1; }