[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