diff options
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
| -rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 35 | 
1 files changed, 20 insertions, 15 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index bd36eb4..be7c1d3 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -4049,18 +4049,18 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,    // -cl-std only applies for OpenCL language standards.    // Override the -std option in this case.    if (const Arg *A = Args.getLastArg(OPT_cl_std_EQ)) { -    LangStandard::Kind OpenCLLangStd -      = llvm::StringSwitch<LangStandard::Kind>(A->getValue()) -        .Cases("cl", "CL", LangStandard::lang_opencl10) -        .Cases("cl1.0", "CL1.0", LangStandard::lang_opencl10) -        .Cases("cl1.1", "CL1.1", LangStandard::lang_opencl11) -        .Cases("cl1.2", "CL1.2", LangStandard::lang_opencl12) -        .Cases("cl2.0", "CL2.0", LangStandard::lang_opencl20) -        .Cases("cl3.0", "CL3.0", LangStandard::lang_opencl30) -        .Cases("clc++", "CLC++", LangStandard::lang_openclcpp10) -        .Cases("clc++1.0", "CLC++1.0", LangStandard::lang_openclcpp10) -        .Cases("clc++2021", "CLC++2021", LangStandard::lang_openclcpp2021) -        .Default(LangStandard::lang_unspecified); +    LangStandard::Kind OpenCLLangStd = +        llvm::StringSwitch<LangStandard::Kind>(A->getValue()) +            .Cases({"cl", "CL"}, LangStandard::lang_opencl10) +            .Cases({"cl1.0", "CL1.0"}, LangStandard::lang_opencl10) +            .Cases({"cl1.1", "CL1.1"}, LangStandard::lang_opencl11) +            .Cases({"cl1.2", "CL1.2"}, LangStandard::lang_opencl12) +            .Cases({"cl2.0", "CL2.0"}, LangStandard::lang_opencl20) +            .Cases({"cl3.0", "CL3.0"}, LangStandard::lang_opencl30) +            .Cases({"clc++", "CLC++"}, LangStandard::lang_openclcpp10) +            .Cases({"clc++1.0", "CLC++1.0"}, LangStandard::lang_openclcpp10) +            .Cases({"clc++2021", "CLC++2021"}, LangStandard::lang_openclcpp2021) +            .Default(LangStandard::lang_unspecified);      if (OpenCLLangStd == LangStandard::lang_unspecified) {        Diags.Report(diag::err_drv_invalid_value) @@ -4600,7 +4600,8 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,          // Validate that if fnative-half-type is given, that          // the language standard is at least hlsl2018, and that          // the target shader model is at least 6.2. -        if (Args.getLastArg(OPT_fnative_half_type)) { +        if (Args.getLastArg(OPT_fnative_half_type) || +            Args.getLastArg(OPT_fnative_int16_type)) {            const LangStandard &Std =                LangStandard::getLangStandardForKind(Opts.LangStd);            if (!(Opts.LangStd >= LangStandard::lang_hlsl2018 && @@ -4614,12 +4615,16 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,            Diags.Report(diag::err_drv_hlsl_bad_shader_unsupported)                << VulkanEnv << T.getOSName() << T.str();          } -        if (Args.getLastArg(OPT_fnative_half_type)) { +        if (Args.getLastArg(OPT_fnative_half_type) || +            Args.getLastArg(OPT_fnative_int16_type)) { +          const char *Str = Args.getLastArg(OPT_fnative_half_type) +                                ? "-fnative-half-type" +                                : "-fnative-int16-type";            const LangStandard &Std =                LangStandard::getLangStandardForKind(Opts.LangStd);            if (!(Opts.LangStd >= LangStandard::lang_hlsl2018))              Diags.Report(diag::err_drv_hlsl_16bit_types_unsupported) -                << "-fnative-half-type" << false << Std.getName(); +                << Str << false << Std.getName();          }        } else {          llvm_unreachable("expected DXIL or SPIR-V target");  | 
