r197625 - ObjectiveC. support "section" attribute on properties

Aaron Ballman aaron at aaronballman.com
Wed Dec 18 15:49:28 PST 2013


Missing sema test cases, but otherwise LGTM!

~Aaron

On Wed, Dec 18, 2013 at 6:09 PM, Fariborz Jahanian <fjahanian at apple.com> wrote:
> Author: fjahanian
> Date: Wed Dec 18 17:09:57 2013
> New Revision: 197625
>
> URL: http://llvm.org/viewvc/llvm-project?rev=197625&view=rev
> Log:
> ObjectiveC. support "section" attribute on properties
> and methods. rdar://15450637
>
> Added:
>     cfe/trunk/test/CodeGenObjC/property-section-attribute.m
> Modified:
>     cfe/trunk/include/clang/Basic/Attr.td
>     cfe/trunk/include/clang/Sema/AttributeList.h
>     cfe/trunk/lib/Sema/SemaObjCProperty.cpp
>
> Modified: cfe/trunk/include/clang/Basic/Attr.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=197625&r1=197624&r2=197625&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/Attr.td (original)
> +++ cfe/trunk/include/clang/Basic/Attr.td Wed Dec 18 17:09:57 2013
> @@ -818,8 +818,9 @@ def InitPriority : InheritableAttr {
>  def Section : InheritableAttr {
>    let Spellings = [GNU<"section">, CXX11<"gnu", "section">];
>    let Args = [StringArgument<"Name">];
> -  let Subjects = SubjectList<[Function, GlobalVar], ErrorDiag,
> -                             "ExpectedFunctionOrGlobalVar">;
> +  let Subjects = SubjectList<[Function, GlobalVar,
> +                              ObjCMethod, ObjCProperty], ErrorDiag,
> +                             "ExpectedFunctionGlobalVarMethodOrProperty">;
>  }
>
>  def Sentinel : InheritableAttr {
>
> Modified: cfe/trunk/include/clang/Sema/AttributeList.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/AttributeList.h?rev=197625&r1=197624&r2=197625&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Sema/AttributeList.h (original)
> +++ cfe/trunk/include/clang/Sema/AttributeList.h Wed Dec 18 17:09:57 2013
> @@ -912,7 +912,7 @@ enum AttributeDeclKind {
>    ExpectedObjCInterfaceDeclInitMethod,
>    ExpectedFunctionVariableOrClass,
>    ExpectedObjectiveCProtocol,
> -  ExpectedFunctionOrGlobalVar
> +  ExpectedFunctionGlobalVarMethodOrProperty
>  };
>
>  }  // end namespace clang
>
> Modified: cfe/trunk/lib/Sema/SemaObjCProperty.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaObjCProperty.cpp?rev=197625&r1=197624&r2=197625&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaObjCProperty.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaObjCProperty.cpp Wed Dec 18 17:09:57 2013
> @@ -1934,6 +1934,10 @@ void Sema::ProcessPropertyDecl(ObjCPrope
>      if (property->hasAttr<ObjCReturnsInnerPointerAttr>())
>        GetterMethod->addAttr(
>          ::new (Context) ObjCReturnsInnerPointerAttr(Loc, Context));
> +
> +    if (const SectionAttr *SA = property->getAttr<SectionAttr>())
> +      GetterMethod->addAttr(::new (Context) SectionAttr(Loc,
> +                                                        Context, SA->getName()));
>
>      if (getLangOpts().ObjCAutoRefCount)
>        CheckARCMethodDecl(GetterMethod);
> @@ -1984,7 +1988,9 @@ void Sema::ProcessPropertyDecl(ObjCPrope
>        // and the real context should be the same.
>        if (lexicalDC)
>          SetterMethod->setLexicalDeclContext(lexicalDC);
> -
> +      if (const SectionAttr *SA = property->getAttr<SectionAttr>())
> +        SetterMethod->addAttr(::new (Context) SectionAttr(Loc,
> +                                                          Context, SA->getName()));
>        // It's possible for the user to have set a very odd custom
>        // setter selector that causes it to have a method family.
>        if (getLangOpts().ObjCAutoRefCount)
>
> Added: cfe/trunk/test/CodeGenObjC/property-section-attribute.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/property-section-attribute.m?rev=197625&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGenObjC/property-section-attribute.m (added)
> +++ cfe/trunk/test/CodeGenObjC/property-section-attribute.m Wed Dec 18 17:09:57 2013
> @@ -0,0 +1,13 @@
> +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s
> +// rdar://15450637.
> +
> + at interface NSObject @end
> +
> + at interface Foo : NSObject
> + at property int p __attribute__((section("__TEXT,foo")));
> + at end
> +
> + at implementation Foo @end
> +
> +// CHECK: define internal i32 @"\01-[Foo p]"({{.*}} section "__TEXT,foo" {
> +// CHECK: define internal void @"\01-[Foo setP:]"({{.*}} section "__TEXT,foo" {
>
>
> _______________________________________________
> 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