diff --git a/include/llvm/ADT/StringSwitch.h b/include/llvm/ADT/StringSwitch.h index 42b0fc4bc44..dc3b15b8111 100644 --- a/include/llvm/ADT/StringSwitch.h +++ b/include/llvm/ADT/StringSwitch.h @@ -53,6 +53,13 @@ public: explicit StringSwitch(StringRef S) : Str(S), Result(nullptr) { } + // StringSwitch is neither copyable nor movable. + StringSwitch(const StringSwitch &) = delete; + StringSwitch(StringSwitch &&) = delete; + void operator=(const StringSwitch &) = delete; + void operator=(StringSwitch &&) = delete; + ~StringSwitch() = default; + template LLVM_ATTRIBUTE_ALWAYS_INLINE StringSwitch& Case(const char (&S)[N], const T& Value) { diff --git a/lib/Passes/PassBuilder.cpp b/lib/Passes/PassBuilder.cpp index 6c0ceb0a3d6..594fe814c83 100644 --- a/lib/Passes/PassBuilder.cpp +++ b/lib/Passes/PassBuilder.cpp @@ -334,13 +334,13 @@ bool PassBuilder::parseModulePassName(ModulePassManager &MPM, StringRef Name, return false; assert(Matches.size() == 3 && "Must capture two matched strings!"); - auto L = StringSwitch(Matches[2]) - .Case("O0", O0) - .Case("O1", O1) - .Case("O2", O2) - .Case("O3", O3) - .Case("Os", Os) - .Case("Oz", Oz); + OptimizationLevel L = StringSwitch(Matches[2]) + .Case("O0", O0) + .Case("O1", O1) + .Case("O2", O2) + .Case("O3", O3) + .Case("Os", Os) + .Case("Oz", Oz); if (Matches[1] == "default") { addPerModuleDefaultPipeline(MPM, L, DebugLogging);