forked from OSchip/llvm-project
After further discussion, rename attribute 'objc_disable_automatic_synthesis' to 'objc_requires_property_definitions'.
llvm-svn: 147622
This commit is contained in:
parent
3c88eae154
commit
0c2c90b1ad
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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">;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue