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()));  | 

