Index: cfe/trunk/include/clang/Basic/Attr.td =================================================================== --- cfe/trunk/include/clang/Basic/Attr.td +++ cfe/trunk/include/clang/Basic/Attr.td @@ -240,6 +240,7 @@ def CUDA : LangOpt<"CUDA">; def COnly : LangOpt<"CPlusPlus", 1>; def OpenCL : LangOpt<"OpenCL">; +def RenderScript : LangOpt<"RenderScript">; // Defines targets for target-specific attributes. The list of strings should // specify architectures for which the target applies, based off the ArchType @@ -728,10 +729,11 @@ let ASTNode = 0; } -def Kernel : Attr { +def RenderScriptKernel : Attr { let Spellings = [GNU<"kernel">]; let Subjects = SubjectList<[Function]>; let Documentation = [Undocumented]; + let LangOpts = [RenderScript]; } def Deprecated : InheritableAttr { Index: cfe/trunk/lib/Sema/SemaDeclAttr.cpp =================================================================== --- cfe/trunk/lib/Sema/SemaDeclAttr.cpp +++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp @@ -4185,17 +4185,6 @@ Attr.getAttributeSpellingListIndex())); } -static void handleKernelAttr(Sema &S, Decl *D, const AttributeList &Attr) { - if (S.LangOpts.RenderScript) { - D->addAttr(::new (S.Context) - KernelAttr(Attr.getRange(), S.Context, - Attr.getAttributeSpellingListIndex())); - } else { - S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << "kernel"; - } -} - - //===----------------------------------------------------------------------===// // Checker-specific attribute handlers. //===----------------------------------------------------------------------===// @@ -5925,8 +5914,8 @@ handleTypeTagForDatatypeAttr(S, D, Attr); break; - case AttributeList::AT_Kernel: - handleKernelAttr(S, D, Attr); + case AttributeList::AT_RenderScriptKernel: + handleSimpleAttribute(S, D, Attr); break; } } Index: cfe/trunk/test/Sema/renderscript.rs =================================================================== --- cfe/trunk/test/Sema/renderscript.rs +++ cfe/trunk/test/Sema/renderscript.rs @@ -2,11 +2,15 @@ // RUN: %clang_cc1 -fsyntax-only -verify -x c %s #ifndef __RENDERSCRIPT__ -// expected-warning@+2 {{kernel attribute ignored}} +// expected-warning@+2 {{'kernel' attribute ignored}} #endif -void __attribute__((kernel)) kernel(); +void __attribute__((kernel)) kernel() {} -// expected-warning@+1 {{'kernel' attribute only applies to functions}} +#ifndef __RENDERSCRIPT__ +// expected-warning@+4 {{'kernel' attribute ignored}} +#else +// expected-warning@+2 {{'kernel' attribute only applies to functions}} +#endif int __attribute__((kernel)) global; #ifndef __RENDERSCRIPT__