diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 10 | ||||
-rw-r--r-- | clang/lib/Frontend/FrontendActions.cpp | 1 | ||||
-rw-r--r-- | clang/lib/Sema/SemaDeclAttr.cpp | 15 |
3 files changed, 26 insertions, 0 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index a948653ee72..b217db96c7e 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1292,6 +1292,7 @@ static InputKind ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args, .Case("objective-c++-header", IK_ObjCXX) .Cases("ast", "pcm", IK_AST) .Case("ir", IK_LLVM_IR) + .Case("renderscript", IK_RenderScript) .Default(IK_None); if (DashX == IK_None) Diags.Report(diag::err_drv_invalid_value) @@ -1495,6 +1496,9 @@ void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK, case IK_PreprocessedObjCXX: LangStd = LangStandard::lang_gnucxx98; break; + case IK_RenderScript: + LangStd = LangStandard::lang_c99; + break; } } @@ -1537,6 +1541,12 @@ void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK, Opts.CUDA = IK == IK_CUDA || IK == IK_PreprocessedCuda || LangStd == LangStandard::lang_cuda; + Opts.RenderScript = IK == IK_RenderScript; + if (Opts.RenderScript) { + Opts.NativeHalfType = 1; + Opts.NativeHalfArgsAndReturns = 1; + } + // OpenCL and C++ both have bool, true, false keywords. Opts.Bool = Opts.OpenCL || Opts.CPlusPlus; diff --git a/clang/lib/Frontend/FrontendActions.cpp b/clang/lib/Frontend/FrontendActions.cpp index 21dd37d43cb..dd5479ca71a 100644 --- a/clang/lib/Frontend/FrontendActions.cpp +++ b/clang/lib/Frontend/FrontendActions.cpp @@ -735,6 +735,7 @@ void PrintPreambleAction::ExecuteAction() { case IK_PreprocessedObjCXX: case IK_AST: case IK_LLVM_IR: + case IK_RenderScript: // We can't do anything with these. return; } diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index f4cce2febd9..e99876b10b7 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -4185,6 +4185,17 @@ static void handleTypeTagForDatatypeAttr(Sema &S, Decl *D, 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. //===----------------------------------------------------------------------===// @@ -5914,6 +5925,10 @@ static void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, case AttributeList::AT_TypeTagForDatatype: handleTypeTagForDatatypeAttr(S, D, Attr); break; + + case AttributeList::AT_Kernel: + handleKernelAttr(S, D, Attr); + break; } } |