[cfe-commits] r96562 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaDeclAttr.cpp

Ted Kremenek kremenek at apple.com
Thu Feb 18 14:37:26 PST 2010


No it's not a gcc supported attribute.  I plan on adding a test case shortly.

On Feb 18, 2010, at 8:11 AM, Fariborz Jahanian wrote:

> Is this a gcc supported attribute? Test case please.
> 
> - Fariborz
> 
> On Feb 17, 2010, at 7:08 PM, Ted Kremenek wrote:
> 
>> Author: kremenek
>> Date: Wed Feb 17 21:08:58 2010
>> New Revision: 96562
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=96562&view=rev
>> Log:
>> Change the behavior of ibaction attributes to be attached to methods, not ivars.
>> 
>> Modified:
>>   cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>>   cfe/trunk/lib/Sema/SemaDeclAttr.cpp
>> 
>> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=96562&r1=96561&r2=96562&view=diff
>> 
>> ==============================================================================
>> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
>> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Feb 17 21:08:58 2010
>> @@ -846,9 +846,11 @@
>> 
>> 
>> // Clang-Specific Attributes
>> -def err_attribute_ib : Error<
>> -  "%0 attribute can only be applied to instance variables or "
>> +def err_attribute_iboutlet : Error<
>> +  "iboutlet attribute can only be applied to instance variables or "
>>  "properties">;
>> +def err_attribute_ibaction: Error<
>> +  "ibaction attribute can only be applied to Objective-C instance methods">;
>> def err_attribute_overloadable_not_function : Error<
>>  "'overloadable' attribute can only be applied to a function">;
>> def err_attribute_overloadable_missing : Error<
>> 
>> Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=96562&r1=96561&r2=96562&view=diff
>> 
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Wed Feb 17 21:08:58 2010
>> @@ -225,29 +225,38 @@
>>    S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
>> }
>> 
>> -static void HandleIBAttr(Decl *d, const AttributeList &Attr, Sema &S) {
>> +static void HandleIBAction(Decl *d, const AttributeList &Attr, Sema &S) {
>>  // check the attribute arguments.
>>  if (Attr.getNumArgs() > 0) {
>>    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 0;
>>    return;
>>  }
>> 
>> -  // The IBOutlet/IBAction attributes only apply to instance variables of
>> +  // The IBAction attributes only apply to instance methods.
>> +  if (ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(d))
>> +    if (MD->isInstanceMethod()) {
>> +      d->addAttr(::new (S.Context) IBActionAttr());
>> +      return;
>> +    }
>> +
>> +  S.Diag(Attr.getLoc(), diag::err_attribute_ibaction) << Attr.getName();
>> +}
>> +
>> +static void HandleIBOutlet(Decl *d, const AttributeList &Attr, Sema &S) {
>> +  // check the attribute arguments.
>> +  if (Attr.getNumArgs() > 0) {
>> +    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 0;
>> +    return;
>> +  }
>> +
>> +  // The IBOutlet attributes only apply to instance variables of
>>  // Objective-C classes.
>>  if (isa<ObjCIvarDecl>(d) || isa<ObjCPropertyDecl>(d)) {
>> -    switch (Attr.getKind()) {
>> -      case AttributeList::AT_IBAction:
>> -        d->addAttr(::new (S.Context) IBActionAttr());
>> -        break;
>> -      case AttributeList::AT_IBOutlet:
>> -        d->addAttr(::new (S.Context) IBOutletAttr());
>> -        break;
>> -      default:
>> -        llvm_unreachable("Invalid IB attribute");
>> -    }
>> +    d->addAttr(::new (S.Context) IBOutletAttr());
>> +    return;
>>  }
>> -  else
>> -    S.Diag(Attr.getLoc(), diag::err_attribute_ib) << Attr.getName();
>> +
>> +  S.Diag(Attr.getLoc(), diag::err_attribute_iboutlet) << Attr.getName();
>> }
>> 
>> static void HandleNonNullAttr(Decl *d, const AttributeList &Attr, Sema &S) {
>> @@ -1745,8 +1754,8 @@
>>    // FIXME: Try to deal with other __declspec attributes!
>>    return;
>>  switch (Attr.getKind()) {
>> -  case AttributeList::AT_IBAction:
>> -  case AttributeList::AT_IBOutlet:    HandleIBAttr          (D, Attr, S); break;
>> +  case AttributeList::AT_IBAction:            HandleIBAction(D, Attr, S); break;
>> +  case AttributeList::AT_IBOutlet:            HandleIBOutlet(D, Attr, S); break;
>>  case AttributeList::AT_address_space:
>>  case AttributeList::AT_objc_gc:
>>  case AttributeList::AT_vector_size:
>> 
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 





More information about the cfe-commits mailing list