This refines some diagnostics and reduces some boilerplate checking logic.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@195560
91177308-0d34-0410-b5e6-
96231b3b80d8
def ObjCSuppressProtocol : InheritableAttr {
let Spellings = [GNU<"objc_suppress_protocol_methods">];
let Subjects = [ObjCInterface];
- let Args = [IdentifierArgument<"Protocol", 1>];
+ let Args = [IdentifierArgument<"Protocol">];
}
def Overloadable : Attr {
return;
}
- IdentifierLoc *Parm = (Attr.getNumArgs() == 1 && Attr.isArgIdent(0))
- ? Attr.getArgAsIdent(0) : 0;
+ IdentifierLoc *Parm = Attr.isArgIdent(0) ? Attr.getArgAsIdent(0) : 0;
if (!Parm) {
S.Diag(D->getLocStart(), diag::err_objc_attr_not_id) << Attr.getName() << 1;
@interface ClassE (MyCat) @end // expected-error {{attributes may not be specified on a category}}
// The attribute requires one or more identifiers.
-__attribute__((objc_suppress_protocol_methods()))
-@interface ClassF @end // expected-error {{parameter of 'objc_suppress_protocol_methods' attribute must be a single name of an Objective-C protocol}}
+__attribute__((objc_suppress_protocol_methods())) // expected-error {{'objc_suppress_protocol_methods' attribute takes one argument}}
+@interface ClassF @end
// The attribute requires one or more identifiers.
__attribute__((objc_suppress_protocol_methods(ProtoA, ProtoB))) // expected-error {{use of undeclared identifier 'ProtoB'}}