mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-13 19:32:41 +00:00
Add requirement that attribute 'objc_protocol_requires_explicit_implementation' can only be applied to protocol definitions.
llvm-svn: 201899
This commit is contained in:
parent
e87e0343de
commit
27cfe10df8
clang
include/clang/Basic
lib/Sema
test/SemaObjC
@ -2499,7 +2499,10 @@ def err_objc_bridged_related_invalid_class_name : Error<
|
||||
def err_objc_bridged_related_known_method : Error<
|
||||
"%0 must be explicitly converted to %1; use %select{%objcclass2|%objcinstance2}3 "
|
||||
"method for this conversion">;
|
||||
|
||||
|
||||
def err_objc_attr_protocol_requires_definition : Error<
|
||||
"attribute %0 can only be applied to @protocol definitions, not forward declarations">;
|
||||
|
||||
// Function Parameter Semantic Analysis.
|
||||
def err_param_with_void_type : Error<"argument may not have 'void' type">;
|
||||
def err_void_only_param : Error<
|
||||
|
@ -1643,8 +1643,14 @@ static void handleAttrWithMessage(Sema &S, Decl *D,
|
||||
Attr.getAttributeSpellingListIndex()));
|
||||
}
|
||||
|
||||
static void handleObjCSuppresProtocolAttr(Sema &S, Decl *D,
|
||||
static void handleObjCSuppresProtocolAttr(Sema &S, ObjCProtocolDecl *D,
|
||||
const AttributeList &Attr) {
|
||||
if (!D->isThisDeclarationADefinition()) {
|
||||
S.Diag(Attr.getLoc(), diag::err_objc_attr_protocol_requires_definition)
|
||||
<< Attr.getName() << Attr.getRange();
|
||||
return;
|
||||
}
|
||||
|
||||
D->addAttr(::new (S.Context)
|
||||
ObjCExplicitProtocolImplAttr(Attr.getRange(), S.Context,
|
||||
Attr.getAttributeSpellingListIndex()));
|
||||
@ -4191,7 +4197,7 @@ static void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D,
|
||||
case AttributeList::AT_ObjCRootClass:
|
||||
handleSimpleAttribute<ObjCRootClassAttr>(S, D, Attr); break;
|
||||
case AttributeList::AT_ObjCExplicitProtocolImpl:
|
||||
handleObjCSuppresProtocolAttr(S, D, Attr);
|
||||
handleObjCSuppresProtocolAttr(S, cast<ObjCProtocolDecl>(D), Attr);
|
||||
break;
|
||||
case AttributeList::AT_ObjCRequiresPropertyDefs:
|
||||
handleSimpleAttribute<ObjCRequiresPropertyDefsAttr>(S, D, Attr); break;
|
||||
|
@ -141,3 +141,6 @@ __attribute__((objc_protocol_requires_explicit_implementation))
|
||||
- (void)dunwich {}
|
||||
@end
|
||||
|
||||
__attribute__((objc_protocol_requires_explicit_implementation)) // expected-error{{attribute 'objc_protocol_requires_explicit_implementation' can only be applied to @protocol definitions, not forward declarations}}
|
||||
@protocol NotDefined;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user