diff options
-rw-r--r-- | llvm/tools/opt/opt.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/llvm/tools/opt/opt.cpp b/llvm/tools/opt/opt.cpp index c1510a7fb25..fc31beb4815 100644 --- a/llvm/tools/opt/opt.cpp +++ b/llvm/tools/opt/opt.cpp @@ -595,14 +595,16 @@ int main(int argc, char **argv) { SmallVector<char, 0> Buffer; SmallVector<char, 0> CompileTwiceBuffer; std::unique_ptr<raw_svector_ostream> BOS; - raw_ostream *OS = &Out->os(); - if (RunTwice) { - BOS = make_unique<raw_svector_ostream>(Buffer); - OS = BOS.get(); - } + raw_ostream *OS = nullptr; // Write bitcode or assembly to the output as the last step... if (!NoOutput && !AnalyzeOnly) { + assert(Out); + OS = &Out->os(); + if (RunTwice) { + BOS = make_unique<raw_svector_ostream>(Buffer); + OS = BOS.get(); + } if (OutputAssembly) Passes.add(createPrintModulePass(*OS, "", PreserveAssemblyUseListOrder)); else @@ -618,6 +620,7 @@ int main(int argc, char **argv) { // If requested, run all passes again with the same pass manager to catch // bugs caused by persistent state in the passes if (RunTwice) { + assert(Out); CompileTwiceBuffer = Buffer; Buffer.clear(); std::unique_ptr<Module> M2(CloneModule(M.get())); |