return false;
}
- /// isObjCSuppressAutosynthesis - Checks that a class or one of its super
+ /// isObjCRequiresPropertyDefs - Checks that a class or one of its super
/// classes must not be auto-synthesized. Returns class decl. if it must not be;
/// 0, otherwise.
- const ObjCInterfaceDecl *isObjCSuppressAutosynthesis() const {
+ const ObjCInterfaceDecl *isObjCRequiresPropertyDefs() const {
const ObjCInterfaceDecl *Class = this;
while (Class) {
- if (Class->hasAttr<ObjCSuppressAutosynthesisAttr>())
+ if (Class->hasAttr<ObjCRequiresPropertyDefsAttr>())
return Class;
Class = Class->getSuperClass();
}
let Spellings = ["objc_arc_weak_reference_unavailable"];
}
-def ObjCSuppressAutosynthesis : InheritableAttr {
- let Spellings = ["objc_disable_automatic_synthesis"];
+def ObjCRequiresPropertyDefs : InheritableAttr {
+ let Spellings = ["objc_requires_property_definitions"];
}
def Unused : InheritableAttr {
def note_class_declared : Note<
"class is declared here">;
def note_suppressed_class_declare : Note<
- "class with specified objc_disable_automatic_synthesis attribute is declared here">;
+ "class with specified objc_requires_property_definitions attribute is declared here">;
def warn_dup_category_def : Warning<
"duplicate definition of category %1 on interface %0">;
def err_conflicting_super_class : Error<"conflicting super class name %0">;
def err_attribute_too_many_arguments : Error<
"attribute takes no more than %0 argument%s0">;
def err_suppress_autosynthesis : Error<
- "objc_disable_automatic_synthesis attribute may only be specified on a class"
+ "objc_requires_property_definitions attribute may only be specified on a class"
"to a class declaration">;
def err_attribute_too_few_arguments : Error<
"attribute takes at least %0 argument%s0">;
AT_analyzer_noreturn,
AT_annotate,
AT_arc_weakref_unavailable,
- AT_objc_disable_automatic_synthesis,
+ AT_objc_requires_property_definitions,
AT_availability, // Clang-specific
AT_base_check,
AT_blocks,
.Case("weak", AT_weak)
.Case("weakref", AT_weakref)
.Case("objc_arc_weak_reference_unavailable", AT_arc_weakref_unavailable)
- .Case("objc_disable_automatic_synthesis", AT_objc_disable_automatic_synthesis)
+ .Case("objc_requires_property_definitions", AT_objc_requires_property_definitions)
.Case("pure", AT_pure)
.Case("mode", AT_mode)
.Case("used", AT_used)
Attr.getRange(), S.Context));
}
-static void handleObjCSuppressAutosynthesisAttr(Sema &S, Decl *D,
+static void handleObjCRequiresPropertyDefsAttr(Sema &S, Decl *D,
const AttributeList &Attr) {
if (!isa<ObjCInterfaceDecl>(D)) {
S.Diag(Attr.getLoc(), diag::err_suppress_autosynthesis);
return;
}
- D->addAttr(::new (S.Context) ObjCSuppressAutosynthesisAttr(
+ D->addAttr(::new (S.Context) ObjCRequiresPropertyDefsAttr(
Attr.getRange(), S.Context));
}
case AttributeList::AT_arc_weakref_unavailable:
handleArcWeakrefUnavailableAttr (S, D, Attr);
break;
- case AttributeList::AT_objc_disable_automatic_synthesis:
- handleObjCSuppressAutosynthesisAttr (S, D, Attr);
+ case AttributeList::AT_objc_requires_property_definitions:
+ handleObjCRequiresPropertyDefsAttr (S, D, Attr);
break;
case AttributeList::AT_unused: handleUnusedAttr (S, D, Attr); break;
case AttributeList::AT_returns_twice:
// of the property in the @implementation.
if (const ObjCInterfaceDecl *IDecl = dyn_cast<ObjCInterfaceDecl>(CDecl))
if (!(LangOpts.ObjCDefaultSynthProperties && LangOpts.ObjCNonFragileABI2) ||
- IDecl->isObjCSuppressAutosynthesis())
+ IDecl->isObjCRequiresPropertyDefs())
DiagnoseUnimplementedProperties(S, IMPDecl, CDecl, InsMap);
llvm::DenseSet<Selector> ClsMap;
IC->addPropertyImplementation(PIDecl);
if (getLangOptions().ObjCDefaultSynthProperties &&
getLangOptions().ObjCNonFragileABI2 &&
- !IDecl->isObjCSuppressAutosynthesis()) {
+ !IDecl->isObjCRequiresPropertyDefs()) {
// Diagnose if an ivar was lazily synthesdized due to a previous
// use and if 1) property is @dynamic or 2) property is synthesized
// but it requires an ivar of different name.
if (!IC)
return;
if (ObjCInterfaceDecl* IDecl = IC->getClassInterface())
- if (!IDecl->isObjCSuppressAutosynthesis())
+ if (!IDecl->isObjCRequiresPropertyDefs())
DefaultSynthesizeProperties(S, IC, IDecl);
}
diag::note_property_declare);
if (LangOpts.ObjCDefaultSynthProperties && LangOpts.ObjCNonFragileABI2)
if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(CDecl))
- if (const ObjCInterfaceDecl *RID = ID->isObjCSuppressAutosynthesis())
+ if (const ObjCInterfaceDecl *RID = ID->isObjCRequiresPropertyDefs())
Diag(RID->getLocation(), diag::note_suppressed_class_declare);
}
diag::note_property_declare);
if (LangOpts.ObjCDefaultSynthProperties && LangOpts.ObjCNonFragileABI2)
if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(CDecl))
- if (const ObjCInterfaceDecl *RID = ID->isObjCSuppressAutosynthesis())
+ if (const ObjCInterfaceDecl *RID = ID->isObjCRequiresPropertyDefs())
Diag(RID->getLocation(), diag::note_suppressed_class_declare);
}
}
// RUN: %clang_cc1 -x objective-c -fsyntax-only -fobjc-default-synthesize-properties -verify %s
// RUN: %clang_cc1 -x objective-c++ -fsyntax-only -fobjc-default-synthesize-properties -verify %s
-#if __has_attribute(objc_disable_automatic_synthesis)
-__attribute ((objc_disable_automatic_synthesis))
+#if __has_attribute(objc_requires_property_definitions)
+__attribute ((objc_requires_property_definitions))
#endif
-@interface NoAuto // expected-note 2 {{class with specified objc_disable_automatic_synthesis attribute is declared here}}
+@interface NoAuto // expected-note 2 {{class with specified objc_requires_property_definitions attribute is declared here}}
@property int NoAutoProp; // expected-note 2 {{property declared here}}
@end
// expected-warning {{property 'NoAutoProp' requires method 'setNoAutoProp:'}}
@end
-__attribute ((objc_disable_automatic_synthesis)) // redundant, just for testing
-@interface Sub : NoAuto // expected-note 3 {{class with specified objc_disable_automatic_synthesis attribute is declared here}}
+__attribute ((objc_requires_property_definitions)) // redundant, just for testing
+@interface Sub : NoAuto // expected-note 3 {{class with specified objc_requires_property_definitions attribute is declared here}}
@property (copy) id SubProperty; // expected-note 2 {{property declared here}}
@end
- (id) DeepMustSynthProperty { return 0; }
@end
-__attribute ((objc_disable_automatic_synthesis))
+__attribute ((objc_requires_property_definitions))
@interface Deep(CAT) // expected-error {{attributes may not be specified on a category}}
@end
-__attribute ((objc_disable_automatic_synthesis)) // expected-error {{objc_disable_automatic_synthesis attribute may only be specified on a class}}
+__attribute ((objc_requires_property_definitions)) // expected-error {{objc_requires_property_definitions attribute may only be specified on a class}}
@protocol P @end