Author: rafael Date: Wed Jan 17 16:20:03 2018 New Revision: 322792 URL: http://llvm.org/viewvc/llvm-project?rev=322792&view=rev Log: Use an enum value instead of a string.
The old StringSwitch use was also broken. It assumed that a StringSwitch returns Optional<T> instead of T and was missing a .Default. Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.h cfe/trunk/lib/CodeGen/BackendUtil.cpp cfe/trunk/lib/Frontend/CodeGenOptions.cpp cfe/trunk/lib/Frontend/CompilerInvocation.cpp Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.h?rev=322792&r1=322791&r2=322792&view=diff ============================================================================== --- cfe/trunk/include/clang/Frontend/CodeGenOptions.h (original) +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.h Wed Jan 17 16:20:03 2018 @@ -16,6 +16,7 @@ #include "clang/Basic/DebugInfoOptions.h" #include "clang/Basic/Sanitizers.h" +#include "llvm/Support/CodeGen.h" #include "llvm/Support/Regex.h" #include "llvm/Target/TargetOptions.h" #include <map> @@ -167,7 +168,7 @@ public: std::string SplitDwarfFile; /// The name of the relocation model to use. - std::string RelocationModel; + llvm::Reloc::Model RelocationModel; /// The thread model to use std::string ThreadModel; Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=322792&r1=322791&r2=322792&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original) +++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Wed Jan 17 16:20:03 2018 @@ -362,21 +362,6 @@ getCodeModel(const CodeGenOptions &CodeG return static_cast<llvm::CodeModel::Model>(CodeModel); } -static llvm::Reloc::Model getRelocModel(const CodeGenOptions &CodeGenOpts) { - // Keep this synced with the equivalent code in - // lib/Frontend/CompilerInvocation.cpp - llvm::Optional<llvm::Reloc::Model> RM; - RM = llvm::StringSwitch<llvm::Reloc::Model>(CodeGenOpts.RelocationModel) - .Case("static", llvm::Reloc::Static) - .Case("pic", llvm::Reloc::PIC_) - .Case("ropi", llvm::Reloc::ROPI) - .Case("rwpi", llvm::Reloc::RWPI) - .Case("ropi-rwpi", llvm::Reloc::ROPI_RWPI) - .Case("dynamic-no-pic", llvm::Reloc::DynamicNoPIC); - assert(RM.hasValue() && "invalid PIC model!"); - return *RM; -} - static TargetMachine::CodeGenFileType getCodeGenFileType(BackendAction Action) { if (Action == Backend_EmitObj) return TargetMachine::CGFT_ObjectFile; @@ -692,7 +677,7 @@ void EmitAssemblyHelper::CreateTargetMac Optional<llvm::CodeModel::Model> CM = getCodeModel(CodeGenOpts); std::string FeaturesStr = llvm::join(TargetOpts.Features.begin(), TargetOpts.Features.end(), ","); - llvm::Reloc::Model RM = getRelocModel(CodeGenOpts); + llvm::Reloc::Model RM = CodeGenOpts.RelocationModel; CodeGenOpt::Level OptLevel = getCGOptLevel(CodeGenOpts); llvm::TargetOptions Options; @@ -1113,7 +1098,7 @@ static void runThinLTOBackend(ModuleSumm Conf.CPU = TOpts.CPU; Conf.CodeModel = getCodeModel(CGOpts); Conf.MAttrs = TOpts.Features; - Conf.RelocModel = getRelocModel(CGOpts); + Conf.RelocModel = CGOpts.RelocationModel; Conf.CGOptLevel = getCGOptLevel(CGOpts); initTargetOptions(Conf.Options, CGOpts, TOpts, LOpts, HeaderOpts); Conf.SampleProfile = std::move(SampleProfile); Modified: cfe/trunk/lib/Frontend/CodeGenOptions.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CodeGenOptions.cpp?rev=322792&r1=322791&r2=322792&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/CodeGenOptions.cpp (original) +++ cfe/trunk/lib/Frontend/CodeGenOptions.cpp Wed Jan 17 16:20:03 2018 @@ -17,7 +17,7 @@ CodeGenOptions::CodeGenOptions() { #define ENUM_CODEGENOPT(Name, Type, Bits, Default) set##Name(Default); #include "clang/Frontend/CodeGenOptions.def" - RelocationModel = "pic"; + RelocationModel = llvm::Reloc::PIC_; memcpy(CoverageVersion, "402*", 4); } Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=322792&r1=322791&r2=322792&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Wed Jan 17 16:20:03 2018 @@ -330,15 +330,23 @@ static StringRef getCodeModel(ArgList &A return "default"; } -static StringRef getRelocModel(ArgList &Args, DiagnosticsEngine &Diags) { +static llvm::Reloc::Model getRelocModel(ArgList &Args, + DiagnosticsEngine &Diags) { if (Arg *A = Args.getLastArg(OPT_mrelocation_model)) { StringRef Value = A->getValue(); - if (Value == "static" || Value == "pic" || Value == "ropi" || - Value == "rwpi" || Value == "ropi-rwpi" || Value == "dynamic-no-pic") - return Value; + auto RM = llvm::StringSwitch<llvm::Optional<llvm::Reloc::Model>>(Value) + .Case("static", llvm::Reloc::Static) + .Case("pic", llvm::Reloc::PIC_) + .Case("ropi", llvm::Reloc::ROPI) + .Case("rwpi", llvm::Reloc::RWPI) + .Case("ropi-rwpi", llvm::Reloc::ROPI_RWPI) + .Case("dynamic-no-pic", llvm::Reloc::DynamicNoPIC) + .Default(None); + if (RM.hasValue()) + return *RM; Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Value; } - return "pic"; + return llvm::Reloc::PIC_; } /// \brief Create a new Regex instance out of the string value in \p RpassArg. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits