diff --git a/clang/include/clang/AST/DeclObjC.h b/clang/include/clang/AST/DeclObjC.h index 782886817cc0..576b588e8985 100644 --- a/clang/include/clang/AST/DeclObjC.h +++ b/clang/include/clang/AST/DeclObjC.h @@ -866,13 +866,13 @@ public: 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()) + if (Class->hasAttr()) return Class; Class = Class->getSuperClass(); } diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 3377fee62d5c..f414fc623732 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -524,8 +524,8 @@ def ArcWeakrefUnavailable : InheritableAttr { 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 { diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 07e6c64b24ef..3a11d14b22b9 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -380,7 +380,7 @@ def note_implementation_declared : Note< 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">; @@ -1374,7 +1374,7 @@ def err_attribute_wrong_number_arguments : Error< 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">; diff --git a/clang/include/clang/Sema/AttributeList.h b/clang/include/clang/Sema/AttributeList.h index 1d0cfd1489a4..a54c1828aefb 100644 --- a/clang/include/clang/Sema/AttributeList.h +++ b/clang/include/clang/Sema/AttributeList.h @@ -169,7 +169,7 @@ public: 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, diff --git a/clang/lib/Sema/AttributeList.cpp b/clang/lib/Sema/AttributeList.cpp index 6892ce2f790e..c184676b9e5a 100644 --- a/clang/lib/Sema/AttributeList.cpp +++ b/clang/lib/Sema/AttributeList.cpp @@ -108,7 +108,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo *Name) { .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) diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 8431076a2473..0b8e9fa2d0fb 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -1579,7 +1579,7 @@ static void handleArcWeakrefUnavailableAttr(Sema &S, Decl *D, Attr.getRange(), S.Context)); } -static void handleObjCSuppressAutosynthesisAttr(Sema &S, Decl *D, +static void handleObjCRequiresPropertyDefsAttr(Sema &S, Decl *D, const AttributeList &Attr) { if (!isa(D)) { S.Diag(Attr.getLoc(), diag::err_suppress_autosynthesis); @@ -1592,7 +1592,7 @@ static void handleObjCSuppressAutosynthesisAttr(Sema &S, Decl *D, return; } - D->addAttr(::new (S.Context) ObjCSuppressAutosynthesisAttr( + D->addAttr(::new (S.Context) ObjCRequiresPropertyDefsAttr( Attr.getRange(), S.Context)); } @@ -3620,8 +3620,8 @@ static void ProcessInheritableDeclAttr(Sema &S, Scope *scope, Decl *D, 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: diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp index ad230b471319..6a55de0c4579 100644 --- a/clang/lib/Sema/SemaDeclObjC.cpp +++ b/clang/lib/Sema/SemaDeclObjC.cpp @@ -1667,7 +1667,7 @@ void Sema::ImplMethodsVsClassMethods(Scope *S, ObjCImplDecl* IMPDecl, // of the property in the @implementation. if (const ObjCInterfaceDecl *IDecl = dyn_cast(CDecl)) if (!(LangOpts.ObjCDefaultSynthProperties && LangOpts.ObjCNonFragileABI2) || - IDecl->isObjCSuppressAutosynthesis()) + IDecl->isObjCRequiresPropertyDefs()) DiagnoseUnimplementedProperties(S, IMPDecl, CDecl, InsMap); llvm::DenseSet ClsMap; diff --git a/clang/lib/Sema/SemaObjCProperty.cpp b/clang/lib/Sema/SemaObjCProperty.cpp index 45c477563475..6379c924e29c 100644 --- a/clang/lib/Sema/SemaObjCProperty.cpp +++ b/clang/lib/Sema/SemaObjCProperty.cpp @@ -857,7 +857,7 @@ Decl *Sema::ActOnPropertyImplDecl(Scope *S, 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. @@ -1356,7 +1356,7 @@ void Sema::DefaultSynthesizeProperties(Scope *S, Decl *D) { if (!IC) return; if (ObjCInterfaceDecl* IDecl = IC->getClassInterface()) - if (!IDecl->isObjCSuppressAutosynthesis()) + if (!IDecl->isObjCRequiresPropertyDefs()) DefaultSynthesizeProperties(S, IC, IDecl); } @@ -1396,7 +1396,7 @@ void Sema::DiagnoseUnimplementedProperties(Scope *S, ObjCImplDecl* IMPDecl, diag::note_property_declare); if (LangOpts.ObjCDefaultSynthProperties && LangOpts.ObjCNonFragileABI2) if (ObjCInterfaceDecl *ID = dyn_cast(CDecl)) - if (const ObjCInterfaceDecl *RID = ID->isObjCSuppressAutosynthesis()) + if (const ObjCInterfaceDecl *RID = ID->isObjCRequiresPropertyDefs()) Diag(RID->getLocation(), diag::note_suppressed_class_declare); } @@ -1411,7 +1411,7 @@ void Sema::DiagnoseUnimplementedProperties(Scope *S, ObjCImplDecl* IMPDecl, diag::note_property_declare); if (LangOpts.ObjCDefaultSynthProperties && LangOpts.ObjCNonFragileABI2) if (ObjCInterfaceDecl *ID = dyn_cast(CDecl)) - if (const ObjCInterfaceDecl *RID = ID->isObjCSuppressAutosynthesis()) + if (const ObjCInterfaceDecl *RID = ID->isObjCRequiresPropertyDefs()) Diag(RID->getLocation(), diag::note_suppressed_class_declare); } } diff --git a/clang/test/SemaObjC/default-synthesize-3.m b/clang/test/SemaObjC/default-synthesize-3.m index cba3b9aff768..9bbc6847870f 100644 --- a/clang/test/SemaObjC/default-synthesize-3.m +++ b/clang/test/SemaObjC/default-synthesize-3.m @@ -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 -#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 @@ -12,8 +12,8 @@ __attribute ((objc_disable_automatic_synthesis)) // 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 @@ -33,9 +33,9 @@ __attribute ((objc_disable_automatic_synthesis)) // redundant, just for testing - (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