After further discussion, rename attribute 'objc_disable_automatic_synthesis' to 'objc_requires_property_definitions'.

llvm-svn: 147622
This commit is contained in:
Ted Kremenek 2012-01-05 22:47:47 +00:00
parent 3c88eae154
commit 0c2c90b1ad
9 changed files with 25 additions and 25 deletions

View File

@ -866,13 +866,13 @@ public:
return false; 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; /// classes must not be auto-synthesized. Returns class decl. if it must not be;
/// 0, otherwise. /// 0, otherwise.
const ObjCInterfaceDecl *isObjCSuppressAutosynthesis() const { const ObjCInterfaceDecl *isObjCRequiresPropertyDefs() const {
const ObjCInterfaceDecl *Class = this; const ObjCInterfaceDecl *Class = this;
while (Class) { while (Class) {
if (Class->hasAttr<ObjCSuppressAutosynthesisAttr>()) if (Class->hasAttr<ObjCRequiresPropertyDefsAttr>())
return Class; return Class;
Class = Class->getSuperClass(); Class = Class->getSuperClass();
} }

View File

@ -524,8 +524,8 @@ def ArcWeakrefUnavailable : InheritableAttr {
let Spellings = ["objc_arc_weak_reference_unavailable"]; let Spellings = ["objc_arc_weak_reference_unavailable"];
} }
def ObjCSuppressAutosynthesis : InheritableAttr { def ObjCRequiresPropertyDefs : InheritableAttr {
let Spellings = ["objc_disable_automatic_synthesis"]; let Spellings = ["objc_requires_property_definitions"];
} }
def Unused : InheritableAttr { def Unused : InheritableAttr {

View File

@ -380,7 +380,7 @@ def note_implementation_declared : Note<
def note_class_declared : Note< def note_class_declared : Note<
"class is declared here">; "class is declared here">;
def note_suppressed_class_declare : Note< 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< def warn_dup_category_def : Warning<
"duplicate definition of category %1 on interface %0">; "duplicate definition of category %1 on interface %0">;
def err_conflicting_super_class : Error<"conflicting super class name %0">; def err_conflicting_super_class : Error<"conflicting super class name %0">;
@ -1374,7 +1374,7 @@ def err_attribute_wrong_number_arguments : Error<
def err_attribute_too_many_arguments : Error< def err_attribute_too_many_arguments : Error<
"attribute takes no more than %0 argument%s0">; "attribute takes no more than %0 argument%s0">;
def err_suppress_autosynthesis : Error< 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">; "to a class declaration">;
def err_attribute_too_few_arguments : Error< def err_attribute_too_few_arguments : Error<
"attribute takes at least %0 argument%s0">; "attribute takes at least %0 argument%s0">;

View File

@ -169,7 +169,7 @@ public:
AT_analyzer_noreturn, AT_analyzer_noreturn,
AT_annotate, AT_annotate,
AT_arc_weakref_unavailable, AT_arc_weakref_unavailable,
AT_objc_disable_automatic_synthesis, AT_objc_requires_property_definitions,
AT_availability, // Clang-specific AT_availability, // Clang-specific
AT_base_check, AT_base_check,
AT_blocks, AT_blocks,

View File

@ -108,7 +108,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo *Name) {
.Case("weak", AT_weak) .Case("weak", AT_weak)
.Case("weakref", AT_weakref) .Case("weakref", AT_weakref)
.Case("objc_arc_weak_reference_unavailable", AT_arc_weakref_unavailable) .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("pure", AT_pure)
.Case("mode", AT_mode) .Case("mode", AT_mode)
.Case("used", AT_used) .Case("used", AT_used)

View File

@ -1579,7 +1579,7 @@ static void handleArcWeakrefUnavailableAttr(Sema &S, Decl *D,
Attr.getRange(), S.Context)); Attr.getRange(), S.Context));
} }
static void handleObjCSuppressAutosynthesisAttr(Sema &S, Decl *D, static void handleObjCRequiresPropertyDefsAttr(Sema &S, Decl *D,
const AttributeList &Attr) { const AttributeList &Attr) {
if (!isa<ObjCInterfaceDecl>(D)) { if (!isa<ObjCInterfaceDecl>(D)) {
S.Diag(Attr.getLoc(), diag::err_suppress_autosynthesis); S.Diag(Attr.getLoc(), diag::err_suppress_autosynthesis);
@ -1592,7 +1592,7 @@ static void handleObjCSuppressAutosynthesisAttr(Sema &S, Decl *D,
return; return;
} }
D->addAttr(::new (S.Context) ObjCSuppressAutosynthesisAttr( D->addAttr(::new (S.Context) ObjCRequiresPropertyDefsAttr(
Attr.getRange(), S.Context)); Attr.getRange(), S.Context));
} }
@ -3620,8 +3620,8 @@ static void ProcessInheritableDeclAttr(Sema &S, Scope *scope, Decl *D,
case AttributeList::AT_arc_weakref_unavailable: case AttributeList::AT_arc_weakref_unavailable:
handleArcWeakrefUnavailableAttr (S, D, Attr); handleArcWeakrefUnavailableAttr (S, D, Attr);
break; break;
case AttributeList::AT_objc_disable_automatic_synthesis: case AttributeList::AT_objc_requires_property_definitions:
handleObjCSuppressAutosynthesisAttr (S, D, Attr); handleObjCRequiresPropertyDefsAttr (S, D, Attr);
break; break;
case AttributeList::AT_unused: handleUnusedAttr (S, D, Attr); break; case AttributeList::AT_unused: handleUnusedAttr (S, D, Attr); break;
case AttributeList::AT_returns_twice: case AttributeList::AT_returns_twice:

View File

@ -1667,7 +1667,7 @@ void Sema::ImplMethodsVsClassMethods(Scope *S, ObjCImplDecl* IMPDecl,
// of the property in the @implementation. // of the property in the @implementation.
if (const ObjCInterfaceDecl *IDecl = dyn_cast<ObjCInterfaceDecl>(CDecl)) if (const ObjCInterfaceDecl *IDecl = dyn_cast<ObjCInterfaceDecl>(CDecl))
if (!(LangOpts.ObjCDefaultSynthProperties && LangOpts.ObjCNonFragileABI2) || if (!(LangOpts.ObjCDefaultSynthProperties && LangOpts.ObjCNonFragileABI2) ||
IDecl->isObjCSuppressAutosynthesis()) IDecl->isObjCRequiresPropertyDefs())
DiagnoseUnimplementedProperties(S, IMPDecl, CDecl, InsMap); DiagnoseUnimplementedProperties(S, IMPDecl, CDecl, InsMap);
llvm::DenseSet<Selector> ClsMap; llvm::DenseSet<Selector> ClsMap;

View File

@ -857,7 +857,7 @@ Decl *Sema::ActOnPropertyImplDecl(Scope *S,
IC->addPropertyImplementation(PIDecl); IC->addPropertyImplementation(PIDecl);
if (getLangOptions().ObjCDefaultSynthProperties && if (getLangOptions().ObjCDefaultSynthProperties &&
getLangOptions().ObjCNonFragileABI2 && getLangOptions().ObjCNonFragileABI2 &&
!IDecl->isObjCSuppressAutosynthesis()) { !IDecl->isObjCRequiresPropertyDefs()) {
// Diagnose if an ivar was lazily synthesdized due to a previous // Diagnose if an ivar was lazily synthesdized due to a previous
// use and if 1) property is @dynamic or 2) property is synthesized // use and if 1) property is @dynamic or 2) property is synthesized
// but it requires an ivar of different name. // but it requires an ivar of different name.
@ -1356,7 +1356,7 @@ void Sema::DefaultSynthesizeProperties(Scope *S, Decl *D) {
if (!IC) if (!IC)
return; return;
if (ObjCInterfaceDecl* IDecl = IC->getClassInterface()) if (ObjCInterfaceDecl* IDecl = IC->getClassInterface())
if (!IDecl->isObjCSuppressAutosynthesis()) if (!IDecl->isObjCRequiresPropertyDefs())
DefaultSynthesizeProperties(S, IC, IDecl); DefaultSynthesizeProperties(S, IC, IDecl);
} }
@ -1396,7 +1396,7 @@ void Sema::DiagnoseUnimplementedProperties(Scope *S, ObjCImplDecl* IMPDecl,
diag::note_property_declare); diag::note_property_declare);
if (LangOpts.ObjCDefaultSynthProperties && LangOpts.ObjCNonFragileABI2) if (LangOpts.ObjCDefaultSynthProperties && LangOpts.ObjCNonFragileABI2)
if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(CDecl)) 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(RID->getLocation(), diag::note_suppressed_class_declare);
} }
@ -1411,7 +1411,7 @@ void Sema::DiagnoseUnimplementedProperties(Scope *S, ObjCImplDecl* IMPDecl,
diag::note_property_declare); diag::note_property_declare);
if (LangOpts.ObjCDefaultSynthProperties && LangOpts.ObjCNonFragileABI2) if (LangOpts.ObjCDefaultSynthProperties && LangOpts.ObjCNonFragileABI2)
if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(CDecl)) 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(RID->getLocation(), diag::note_suppressed_class_declare);
} }
} }

View File

@ -1,10 +1,10 @@
// 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
// 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) #if __has_attribute(objc_requires_property_definitions)
__attribute ((objc_disable_automatic_synthesis)) __attribute ((objc_requires_property_definitions))
#endif #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}} @property int NoAutoProp; // expected-note 2 {{property declared here}}
@end @end
@ -12,8 +12,8 @@ __attribute ((objc_disable_automatic_synthesis))
// expected-warning {{property 'NoAutoProp' requires method 'setNoAutoProp:'}} // expected-warning {{property 'NoAutoProp' requires method 'setNoAutoProp:'}}
@end @end
__attribute ((objc_disable_automatic_synthesis)) // redundant, just for testing __attribute ((objc_requires_property_definitions)) // redundant, just for testing
@interface Sub : NoAuto // expected-note 3 {{class with specified objc_disable_automatic_synthesis attribute is declared here}} @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}} @property (copy) id SubProperty; // expected-note 2 {{property declared here}}
@end @end
@ -33,9 +33,9 @@ __attribute ((objc_disable_automatic_synthesis)) // redundant, just for testing
- (id) DeepMustSynthProperty { return 0; } - (id) DeepMustSynthProperty { return 0; }
@end @end
__attribute ((objc_disable_automatic_synthesis)) __attribute ((objc_requires_property_definitions))
@interface Deep(CAT) // expected-error {{attributes may not be specified on a category}} @interface Deep(CAT) // expected-error {{attributes may not be specified on a category}}
@end @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 @protocol P @end