]> granicus.if.org Git - llvm/commitdiff
[PM] Fix r307532: Get rid of a dangling reference.
authorPhilip Pfaffe <philip.pfaffe@gmail.com>
Mon, 10 Jul 2017 12:48:51 +0000 (12:48 +0000)
committerPhilip Pfaffe <philip.pfaffe@gmail.com>
Mon, 10 Jul 2017 12:48:51 +0000 (12:48 +0000)
Escaping lambda by-reference capture of local variable caused a dangling
reference.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307534 91177308-0d34-0410-b5e6-96231b3b80d8

tools/opt/NewPMDriver.cpp

index 9672ce7d17720a84bfa2f42576a1e81470f43c6f..0501e80e1a0620eede56cfcf5ac2a314cddcdbb1 100644 (file)
@@ -88,41 +88,43 @@ static cl::opt<std::string> VectorizerStartEPPipeline(
 static void registerEPCallbacks(PassBuilder &PB, bool VerifyEachPass,
                                 bool DebugLogging) {
   if (!PeepholeEPPipeline.empty())
-    PB.registerPeepholeEPCallback(
-        [&](FunctionPassManager &PM, PassBuilder::OptimizationLevel Level) {
-          return PB.parsePassPipeline(PM, PeepholeEPPipeline, VerifyEachPass,
-                                      DebugPM);
-        });
+    PB.registerPeepholeEPCallback([&PB, VerifyEachPass, DebugLogging](
+        FunctionPassManager &PM, PassBuilder::OptimizationLevel Level) {
+      return PB.parsePassPipeline(PM, PeepholeEPPipeline, VerifyEachPass,
+                                  DebugPM);
+    });
   if (!LateLoopOptimizationsEPPipeline.empty())
     PB.registerLateLoopOptimizationsEPCallback(
-        [&](LoopPassManager &PM, PassBuilder::OptimizationLevel Level) {
+        [&PB, VerifyEachPass, DebugLogging](
+            LoopPassManager &PM, PassBuilder::OptimizationLevel Level) {
           return PB.parsePassPipeline(PM, LateLoopOptimizationsEPPipeline,
                                       VerifyEachPass, DebugPM);
         });
   if (!LoopOptimizerEndEPPipeline.empty())
-    PB.registerLoopOptimizerEndEPCallback(
-        [&](LoopPassManager &PM, PassBuilder::OptimizationLevel Level) {
-          return PB.parsePassPipeline(PM, LoopOptimizerEndEPPipeline,
-                                      VerifyEachPass, DebugPM);
-        });
+    PB.registerLoopOptimizerEndEPCallback([&PB, VerifyEachPass, DebugLogging](
+        LoopPassManager &PM, PassBuilder::OptimizationLevel Level) {
+      return PB.parsePassPipeline(PM, LoopOptimizerEndEPPipeline,
+                                  VerifyEachPass, DebugPM);
+    });
   if (!ScalarOptimizerLateEPPipeline.empty())
     PB.registerScalarOptimizerLateEPCallback(
-        [&](FunctionPassManager &PM, PassBuilder::OptimizationLevel Level) {
+        [&PB, VerifyEachPass, DebugLogging](
+            FunctionPassManager &PM, PassBuilder::OptimizationLevel Level) {
           return PB.parsePassPipeline(PM, ScalarOptimizerLateEPPipeline,
                                       VerifyEachPass, DebugPM);
         });
   if (!CGSCCOptimizerLateEPPipeline.empty())
-    PB.registerCGSCCOptimizerLateEPCallback(
-        [&](CGSCCPassManager &PM, PassBuilder::OptimizationLevel Level) {
-          return PB.parsePassPipeline(PM, CGSCCOptimizerLateEPPipeline,
-                                      VerifyEachPass, DebugPM);
-        });
+    PB.registerCGSCCOptimizerLateEPCallback([&PB, VerifyEachPass, DebugLogging](
+        CGSCCPassManager &PM, PassBuilder::OptimizationLevel Level) {
+      return PB.parsePassPipeline(PM, CGSCCOptimizerLateEPPipeline,
+                                  VerifyEachPass, DebugPM);
+    });
   if (!VectorizerStartEPPipeline.empty())
-    PB.registerVectorizerStartEPCallback(
-        [&](FunctionPassManager &PM, PassBuilder::OptimizationLevel Level) {
-          return PB.parsePassPipeline(PM, VectorizerStartEPPipeline,
-                                      VerifyEachPass, DebugPM);
-        });
+    PB.registerVectorizerStartEPCallback([&PB, VerifyEachPass, DebugLogging](
+        FunctionPassManager &PM, PassBuilder::OptimizationLevel Level) {
+      return PB.parsePassPipeline(PM, VectorizerStartEPPipeline, VerifyEachPass,
+                                  DebugPM);
+    });
 }
 
 bool llvm::runPassPipeline(StringRef Arg0, Module &M, TargetMachine *TM,