objc: introduce objc_suppress_autosynthesis class
attributes for later use. llvm-svn: 147457
This commit is contained in:
parent
2007dc8892
commit
9d4d20af55
|
@ -864,6 +864,18 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
/// isObjCSuppressAutosynthesis - Checks that a class or one of its super
|
||||
/// classes must not be auto-synthesized. Returns true if it must not be.
|
||||
bool isObjCSuppressAutosynthesis() const {
|
||||
const ObjCInterfaceDecl *Class = this;
|
||||
while (Class) {
|
||||
if (Class->hasAttr<ObjCSuppressAutosynthesisAttr>())
|
||||
return true;
|
||||
Class = Class->getSuperClass();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
ObjCIvarDecl *lookupInstanceVariable(IdentifierInfo *IVarName,
|
||||
ObjCInterfaceDecl *&ClassDeclared);
|
||||
ObjCIvarDecl *lookupInstanceVariable(IdentifierInfo *IVarName) {
|
||||
|
|
|
@ -524,6 +524,10 @@ def ArcWeakrefUnavailable : InheritableAttr {
|
|||
let Spellings = ["objc_arc_weak_reference_unavailable"];
|
||||
}
|
||||
|
||||
def ObjCSuppressAutosynthesis : InheritableAttr {
|
||||
let Spellings = ["objc_suppress_autosynhesis"];
|
||||
}
|
||||
|
||||
def Unused : InheritableAttr {
|
||||
let Spellings = ["unused"];
|
||||
}
|
||||
|
|
|
@ -169,6 +169,7 @@ public:
|
|||
AT_analyzer_noreturn,
|
||||
AT_annotate,
|
||||
AT_arc_weakref_unavailable,
|
||||
AT_objc_suppress_autosynthesis,
|
||||
AT_availability, // Clang-specific
|
||||
AT_base_check,
|
||||
AT_blocks,
|
||||
|
|
|
@ -108,6 +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_suppress_autosynthesis", AT_objc_suppress_autosynthesis)
|
||||
.Case("pure", AT_pure)
|
||||
.Case("mode", AT_mode)
|
||||
.Case("used", AT_used)
|
||||
|
|
|
@ -1579,6 +1579,18 @@ static void handleArcWeakrefUnavailableAttr(Sema &S, Decl *D,
|
|||
Attr.getRange(), S.Context));
|
||||
}
|
||||
|
||||
static void handleObjCSuppressAutosynthesisAttr(Sema &S, Decl *D,
|
||||
const AttributeList &Attr) {
|
||||
unsigned NumArgs = Attr.getNumArgs();
|
||||
if (NumArgs > 0) {
|
||||
S.Diag(Attr.getLoc(), diag::err_attribute_too_many_arguments) << 0;
|
||||
return;
|
||||
}
|
||||
|
||||
D->addAttr(::new (S.Context) ObjCSuppressAutosynthesisAttr(
|
||||
Attr.getRange(), S.Context));
|
||||
}
|
||||
|
||||
static void handleAvailabilityAttr(Sema &S, Decl *D,
|
||||
const AttributeList &Attr) {
|
||||
IdentifierInfo *Platform = Attr.getParameterName();
|
||||
|
@ -3603,6 +3615,9 @@ static void ProcessInheritableDeclAttr(Sema &S, Scope *scope, Decl *D,
|
|||
case AttributeList::AT_arc_weakref_unavailable:
|
||||
handleArcWeakrefUnavailableAttr (S, D, Attr);
|
||||
break;
|
||||
case AttributeList::AT_objc_suppress_autosynthesis:
|
||||
handleObjCSuppressAutosynthesisAttr (S, D, Attr);
|
||||
break;
|
||||
case AttributeList::AT_unused: handleUnusedAttr (S, D, Attr); break;
|
||||
case AttributeList::AT_returns_twice:
|
||||
handleReturnsTwiceAttr(S, D, Attr);
|
||||
|
|
Loading…
Reference in New Issue