diff options
author | Jordan Rose <jordan_rose@apple.com> | 2016-07-25 18:34:51 +0000 |
---|---|---|
committer | Jordan Rose <jordan_rose@apple.com> | 2016-07-25 18:34:51 +0000 |
commit | f85a95fdcbfbe22e1cb184171f1861492fe7a9d7 (patch) | |
tree | a074189831143a7ceee0264cfd9d60d3d48adcce /llvm/lib/Passes/PassBuilder.cpp | |
parent | 40765a62adee1239bca52676c25d25378e04b1d2 (diff) | |
download | llvm-f85a95fdcbfbe22e1cb184171f1861492fe7a9d7.zip llvm-f85a95fdcbfbe22e1cb184171f1861492fe7a9d7.tar.gz llvm-f85a95fdcbfbe22e1cb184171f1861492fe7a9d7.tar.bz2 |
StringSwitch cannot be copied (take 2).
This prevents StringSwitch from being used with 'auto', which is
important because the inferred type is StringSwitch rather than the
result type. This is a problem because StringSwitch stores addresses
of temporary values rather than copying or moving the value into its
own storage.
This is a compromise that still allows wrapping StringSwitch in other
temporary structures, which (unlike StringSwitch) may be non-trivial
to set up and therefore want to at least be movable. (For an example,
see QueryParser.cpp in clang-tools-extra.)
Changing this uncovered the bug in PassBuilder, also in this patch.
Clang doesn't seem to have any occurrences of the issue.
Re-commit of r276652.
llvm-svn: 276671
Diffstat (limited to 'llvm/lib/Passes/PassBuilder.cpp')
-rw-r--r-- | llvm/lib/Passes/PassBuilder.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index 6c0ceb0..594fe81 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/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<OptimizationLevel>(Matches[2]) - .Case("O0", O0) - .Case("O1", O1) - .Case("O2", O2) - .Case("O3", O3) - .Case("Os", Os) - .Case("Oz", Oz); + OptimizationLevel L = StringSwitch<OptimizationLevel>(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); |