diff --git a/opencl_clang_options.td b/opencl_clang_options.td index 42cfb7c..7c19e36 100644 --- a/opencl_clang_options.td +++ b/opencl_clang_options.td @@ -33,6 +33,9 @@ def cl_std_CL1_1: Flag<["-"], "cl-std=CL1.1">; def cl_std_CL1_2: Flag<["-"], "cl-std=CL1.2">; def cl_std_CL2_0: Flag<["-"], "cl-std=CL2.0">; def cl_std_CL3_0: Flag<["-"], "cl-std=CL3.0">; +def cl_std_CLCxx: Flag<["-"], "cl-std=CLC++">; +def cl_std_CLCxx1_0: Flag<["-"], "cl-std=CLC++1.0">; +def cl_std_CLCxx2021: Flag<["-"], "cl-std=CLC++2021">; def cl_uniform_work_group_size: Flag<["-"], "cl-uniform-work-group-size">; def cl_no_subgroup_ifp: Flag<["-"], "cl-no-subgroup-ifp">; def triple : Separate<["-"], "triple">, HelpText<"Specify target triple (e.g. i686-apple-darwin9)">; diff --git a/options_compile.cpp b/options_compile.cpp index db48db1..25cb1d6 100644 --- a/options_compile.cpp +++ b/options_compile.cpp @@ -67,6 +67,7 @@ std::string EffectiveOptionsFilter::processOptions(const OpenCLArgList &args, ArgsVector &effectiveArgs) { // Reset args int iCLStdSet = 0; + bool isCpp = false; bool fp64Enabled = false; std::string szTriple; std::string sourceName(llvm::Twine(s_progID++).str()); @@ -135,6 +136,17 @@ std::string EffectiveOptionsFilter::processOptions(const OpenCLArgList &args, iCLStdSet = 300; effectiveArgs.push_back((*it)->getAsString(args)); break; + case OPT_COMPILE_cl_std_CLCxx: + case OPT_COMPILE_cl_std_CLCxx1_0: + iCLStdSet = 200; + isCpp = true; + effectiveArgs.push_back((*it)->getAsString(args)); + break; + case OPT_COMPILE_cl_std_CLCxx2021: + iCLStdSet = 300; + isCpp = true; + effectiveArgs.push_back((*it)->getAsString(args)); + break; case OPT_COMPILE_triple: szTriple = (*it)->getValue(); break; @@ -212,7 +224,9 @@ std::string EffectiveOptionsFilter::processOptions(const OpenCLArgList &args, // Specifying the option makes clang emit function body for functions // marked with inline keyword. - effectiveArgs.push_back("-fgnu89-inline"); + if (!isCpp) { + effectiveArgs.push_back("-fgnu89-inline"); + } // Do not support all extensions by default. Support for a particular // extension should be enabled by passing a '-cl-ext' option in pszOptionsEx.