[Lldb-commits] [lldb] fa12606 - [lldb] Remove reproducer replay functionality

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Fri Dec 17 17:14:58 PST 2021


Author: Jonas Devlieghere
Date: 2021-12-17T17:14:52-08:00
New Revision: fa1260697ec80ac0586d67c0de8758818ca865c0

URL: https://github.com/llvm/llvm-project/commit/fa1260697ec80ac0586d67c0de8758818ca865c0
DIFF: https://github.com/llvm/llvm-project/commit/fa1260697ec80ac0586d67c0de8758818ca865c0.diff

LOG: [lldb] Remove reproducer replay functionality

This is part of a bigger rework of the reproducer feature. See [1] for
more details.

[1] https://lists.llvm.org/pipermail/lldb-dev/2021-September/017045.html

Added: 
    

Modified: 
    lldb/include/lldb/Utility/Reproducer.h
    lldb/source/API/SBReproducer.cpp
    lldb/source/API/SystemInitializerFull.cpp
    lldb/source/Commands/CommandObjectReproducer.cpp
    lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
    lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
    lldb/source/Utility/Reproducer.cpp
    lldb/test/API/functionalities/reproducers/attach/TestReproducerAttach.py
    lldb/test/Shell/Driver/TestHelp.test
    lldb/test/Shell/Reproducer/Modules/TestModuleCXX.test
    lldb/test/Shell/Reproducer/TestDriverOptions.test
    lldb/test/Shell/Reproducer/TestDump.test
    lldb/test/Shell/Reproducer/TestFileRepro.test
    lldb/test/Shell/Reproducer/TestHomeDir.test
    lldb/test/Shell/Reproducer/TestVerify.test
    lldb/test/Shell/Reproducer/TestVersionCheck.test
    lldb/test/Shell/Reproducer/TestWorkingDir.test
    lldb/tools/driver/Driver.cpp
    lldb/tools/driver/Options.td
    lldb/unittests/Utility/ReproducerTest.cpp

Removed: 
    lldb/test/Shell/Reproducer/Functionalities/Inputs/DataFormatter.in
    lldb/test/Shell/Reproducer/Functionalities/Inputs/ExpressionEvaluation.in
    lldb/test/Shell/Reproducer/Functionalities/Inputs/foo.cpp
    lldb/test/Shell/Reproducer/Functionalities/Inputs/stepping.c
    lldb/test/Shell/Reproducer/Functionalities/TestDataFormatter.test
    lldb/test/Shell/Reproducer/Functionalities/TestExpressionEvaluation.test
    lldb/test/Shell/Reproducer/Functionalities/TestImageList.test
    lldb/test/Shell/Reproducer/Functionalities/TestStepping.test
    lldb/test/Shell/Reproducer/TestGDBRemoteRepro.test
    lldb/test/Shell/Reproducer/TestMultipleTargets.test
    lldb/test/Shell/Reproducer/TestProcessList.test
    lldb/test/Shell/Reproducer/TestRelativePath.test
    lldb/test/Shell/Reproducer/TestReuseDirectory.test
    lldb/test/Shell/Reproducer/TestSynchronous.test


################################################################################
diff  --git a/lldb/include/lldb/Utility/Reproducer.h b/lldb/include/lldb/Utility/Reproducer.h
index 4659254e57d6f..35043d6885111 100644
--- a/lldb/include/lldb/Utility/Reproducer.h
+++ b/lldb/include/lldb/Utility/Reproducer.h
@@ -29,8 +29,6 @@ class Reproducer;
 
 enum class ReproducerMode {
   Capture,
-  Replay,
-  PassiveReplay,
   Off,
 };
 
@@ -179,15 +177,12 @@ class Loader final {
 
   const FileSpec &GetRoot() const { return m_root; }
 
-  bool IsPassiveReplay() const { return m_passive_replay; }
-
 private:
   bool HasFile(llvm::StringRef file);
 
   FileSpec m_root;
   std::vector<std::string> m_files;
   bool m_loaded;
-  bool m_passive_replay;
 };
 
 /// The reproducer enables clients to obtain access to the Generator and
@@ -212,11 +207,9 @@ class Reproducer {
   FileSpec GetReproducerPath() const;
 
   bool IsCapturing() { return static_cast<bool>(m_generator); };
-  bool IsReplaying() { return static_cast<bool>(m_loader); };
 
 protected:
   llvm::Error SetCapture(llvm::Optional<FileSpec> root);
-  llvm::Error SetReplay(llvm::Optional<FileSpec> root, bool passive = false);
 
 private:
   static llvm::Optional<Reproducer> &InstanceImpl();

diff  --git a/lldb/source/API/SBReproducer.cpp b/lldb/source/API/SBReproducer.cpp
index 3bd82df5c9065..c9c9a03c694a9 100644
--- a/lldb/source/API/SBReproducer.cpp
+++ b/lldb/source/API/SBReproducer.cpp
@@ -165,111 +165,24 @@ const char *SBReproducer::Capture(const char *path) {
 }
 
 const char *SBReproducer::PassiveReplay(const char *path) {
-  static std::string error;
-  if (auto e = Reproducer::Initialize(ReproducerMode::PassiveReplay,
-                                      FileSpec(path))) {
-    error = llvm::toString(std::move(e));
-    return error.c_str();
-  }
-
-  if (auto *l = lldb_private::repro::Reproducer::Instance().GetLoader()) {
-    FileSpec file = l->GetFile<SBProvider::Info>();
-    auto error_or_file = llvm::MemoryBuffer::getFile(file.GetPath());
-    if (!error_or_file) {
-      error =
-          "unable to read SB API data: " + error_or_file.getError().message();
-      return error.c_str();
-    }
-    static ReplayData r(std::move(*error_or_file));
-    InstrumentationData::Initialize(r.GetDeserializer(), r.GetRegistry());
-  }
-
-  return nullptr;
+  return "Reproducer replay has been removed";
 }
 
 const char *SBReproducer::Replay(const char *path) {
-  SBReplayOptions options;
-  return SBReproducer::Replay(path, options);
+  return "Reproducer replay has been removed";
 }
 
 const char *SBReproducer::Replay(const char *path, bool skip_version_check) {
-  SBReplayOptions options;
-  options.SetCheckVersion(!skip_version_check);
-  return SBReproducer::Replay(path, options);
+  return Replay(path);
 }
 
 const char *SBReproducer::Replay(const char *path,
                                  const SBReplayOptions &options) {
-  static std::string error;
-  if (auto e = Reproducer::Initialize(ReproducerMode::Replay, FileSpec(path))) {
-    error = llvm::toString(std::move(e));
-    return error.c_str();
-  }
-
-  repro::Loader *loader = repro::Reproducer::Instance().GetLoader();
-  if (!loader) {
-    error = "unable to get replay loader.";
-    return error.c_str();
-  }
-
-  if (options.GetCheckVersion()) {
-    llvm::Expected<std::string> version = loader->LoadBuffer<VersionProvider>();
-    if (!version) {
-      error = llvm::toString(version.takeError());
-      return error.c_str();
-    }
-    if (lldb_private::GetVersion() != llvm::StringRef(*version).rtrim()) {
-      error = "reproducer capture and replay version don't match:\n";
-      error.append("reproducer captured with:\n");
-      error.append(*version);
-      error.append("reproducer replayed with:\n");
-      error.append(lldb_private::GetVersion());
-      return error.c_str();
-    }
-  }
-
-  if (options.GetVerify()) {
-    bool verification_failed = false;
-    llvm::raw_string_ostream os(error);
-    auto error_callback = [&](llvm::StringRef error) {
-      verification_failed = true;
-      os << "\nerror: " << error;
-    };
-
-    auto warning_callback = [&](llvm::StringRef warning) {
-      verification_failed = true;
-      os << "\nwarning: " << warning;
-    };
-
-    auto note_callback = [&](llvm::StringRef warning) {};
-
-    Verifier verifier(loader);
-    verifier.Verify(error_callback, warning_callback, note_callback);
-
-    if (verification_failed) {
-      os.flush();
-      return error.c_str();
-    }
-  }
-
-  FileSpec file = loader->GetFile<SBProvider::Info>();
-  if (!file) {
-    error = "unable to get replay data from reproducer.";
-    return error.c_str();
-  }
-
-  SBRegistry registry;
-  registry.Replay(file);
-
-  return nullptr;
+  return Replay(path);
 }
 
 const char *SBReproducer::Finalize(const char *path) {
   static std::string error;
-  if (auto e = Reproducer::Initialize(ReproducerMode::Replay, FileSpec(path))) {
-    error = llvm::toString(std::move(e));
-    return error.c_str();
-  }
 
   repro::Loader *loader = repro::Reproducer::Instance().GetLoader();
   if (!loader) {

diff  --git a/lldb/source/API/SystemInitializerFull.cpp b/lldb/source/API/SystemInitializerFull.cpp
index cc6cb6925bd03..b01cb2ff545be 100644
--- a/lldb/source/API/SystemInitializerFull.cpp
+++ b/lldb/source/API/SystemInitializerFull.cpp
@@ -50,15 +50,8 @@ SystemInitializerFull::~SystemInitializerFull() = default;
 
 llvm::Error SystemInitializerFull::Initialize() {
   llvm::Error error = SystemInitializerCommon::Initialize();
-  if (error) {
-    // During active replay, the ::Initialize call is replayed like any other
-    // SB API call and the return value is ignored. Since we can't intercept
-    // this, we terminate here before the uninitialized debugger inevitably
-    // crashes.
-    if (repro::Reproducer::Instance().IsReplaying())
-      llvm::report_fatal_error(std::move(error));
+  if (error)
     return error;
-  }
 
   // Initialize LLVM and Clang
   llvm::InitializeAllTargets();

diff  --git a/lldb/source/Commands/CommandObjectReproducer.cpp b/lldb/source/Commands/CommandObjectReproducer.cpp
index 01f9dc64e6f00..4db3e070df3c1 100644
--- a/lldb/source/Commands/CommandObjectReproducer.cpp
+++ b/lldb/source/Commands/CommandObjectReproducer.cpp
@@ -195,10 +195,6 @@ class CommandObjectReproducerGenerate : public CommandObjectParsed {
         SetError(result, std::move(e));
         return result.Succeeded();
       }
-    } else if (r.IsReplaying()) {
-      // Make this operation a NO-OP in replay mode.
-      result.SetStatus(eReturnStatusSuccessFinishNoResult);
-      return result.Succeeded();
     } else {
       result.AppendErrorWithFormat("Unable to get the reproducer generator");
       return false;
@@ -276,7 +272,7 @@ class CommandObjectReproducerXCrash : public CommandObjectParsed {
 
     auto &r = Reproducer::Instance();
 
-    if (!r.IsCapturing() && !r.IsReplaying()) {
+    if (!r.IsCapturing()) {
       result.AppendError(
           "forcing a crash is only supported when capturing a reproducer.");
       result.SetStatus(eReturnStatusSuccessFinishNoResult);
@@ -326,15 +322,10 @@ class CommandObjectReproducerStatus : public CommandObjectParsed {
     auto &r = Reproducer::Instance();
     if (r.IsCapturing()) {
       result.GetOutputStream() << "Reproducer is in capture mode.\n";
-    } else if (r.IsReplaying()) {
-      result.GetOutputStream() << "Reproducer is in replay mode.\n";
-    } else {
-      result.GetOutputStream() << "Reproducer is off.\n";
-    }
-
-    if (r.IsCapturing() || r.IsReplaying()) {
       result.GetOutputStream()
           << "Path: " << r.GetReproducerPath().GetPath() << '\n';
+    } else {
+      result.GetOutputStream() << "Reproducer is off.\n";
     }
 
     // Auto generate is hidden unless enabled because this is mostly for

diff  --git a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
index 987f7c7f57e76..3535a5ad739d4 100644
--- a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
+++ b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
@@ -225,18 +225,12 @@ Status PlatformRemoteGDBServer::ConnectRemote(Args &args) {
   m_platform_hostname = parsed_url->hostname.str();
 
   m_gdb_client.SetConnection(std::make_unique<ConnectionFileDescriptor>());
-  if (repro::Reproducer::Instance().IsReplaying()) {
-    error = m_gdb_replay_server.Connect(m_gdb_client);
-    if (error.Success())
-      m_gdb_replay_server.StartAsyncThread();
-  } else {
-    if (repro::Generator *g = repro::Reproducer::Instance().GetGenerator()) {
-      repro::GDBRemoteProvider &provider =
-          g->GetOrCreate<repro::GDBRemoteProvider>();
-      m_gdb_client.SetPacketRecorder(provider.GetNewPacketRecorder());
-    }
-    m_gdb_client.Connect(url, &error);
+  if (repro::Generator *g = repro::Reproducer::Instance().GetGenerator()) {
+    repro::GDBRemoteProvider &provider =
+        g->GetOrCreate<repro::GDBRemoteProvider>();
+    m_gdb_client.SetPacketRecorder(provider.GetNewPacketRecorder());
   }
+  m_gdb_client.Connect(url, &error);
 
   if (error.Fail())
     return error;

diff  --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
index 3ade8c815febb..89702d176ef8b 100644
--- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -526,18 +526,15 @@ Status ProcessGDBRemote::WillAttachToProcessWithName(const char *process_name,
 
 Status ProcessGDBRemote::DoConnectRemote(llvm::StringRef remote_url) {
   Log *log(ProcessGDBRemoteLog::GetLogIfAllCategoriesSet(GDBR_LOG_PROCESS));
-  Status error(WillLaunchOrAttach());
 
+  Status error(WillLaunchOrAttach());
   if (error.Fail())
     return error;
 
-  if (repro::Reproducer::Instance().IsReplaying())
-    error = ConnectToReplayServer();
-  else
-    error = ConnectToDebugserver(remote_url);
-
+  error = ConnectToDebugserver(remote_url);
   if (error.Fail())
     return error;
+
   StartAsyncThread();
 
   lldb::pid_t pid = m_gdb_comm.GetCurrentProcessID();
@@ -3259,9 +3256,6 @@ ProcessGDBRemote::EstablishConnectionIfNeeded(const ProcessInfo &process_info) {
   if (platform_sp && !platform_sp->IsHost())
     return Status("Lost debug server connection");
 
-  if (repro::Reproducer::Instance().IsReplaying())
-    return ConnectToReplayServer();
-
   auto error = LaunchAndConnectToDebugserver(process_info);
   if (error.Fail()) {
     const char *error_string = error.AsCString();
@@ -3540,7 +3534,7 @@ thread_result_t ProcessGDBRemote::AsyncThread(void *arg) {
   // So it is safer to simply ignore any remaining packets by
   // explicitly checking for eStateExited before reentering the
   // fetch loop.
-  
+
   bool done = false;
   while (!done && process->GetPrivateState() != eStateExited) {
     LLDB_LOGF(log,

diff  --git a/lldb/source/Utility/Reproducer.cpp b/lldb/source/Utility/Reproducer.cpp
index b63863c535faf..a306d6c1ef255 100644
--- a/lldb/source/Utility/Reproducer.cpp
+++ b/lldb/source/Utility/Reproducer.cpp
@@ -44,10 +44,6 @@ llvm::Error Reproducer::Initialize(ReproducerMode mode,
     }
     return Instance().SetCapture(root);
   } break;
-  case ReproducerMode::Replay:
-    return Instance().SetReplay(root, /*passive*/ false);
-  case ReproducerMode::PassiveReplay:
-    return Instance().SetReplay(root, /*passive*/ true);
   case ReproducerMode::Off:
     break;
   };
@@ -116,26 +112,6 @@ llvm::Error Reproducer::SetCapture(llvm::Optional<FileSpec> root) {
   return Error::success();
 }
 
-llvm::Error Reproducer::SetReplay(llvm::Optional<FileSpec> root, bool passive) {
-  std::lock_guard<std::mutex> guard(m_mutex);
-
-  if (root && m_generator)
-    return make_error<StringError>(
-        "cannot replay a reproducer when generating one",
-        inconvertibleErrorCode());
-
-  if (!root) {
-    m_loader.reset();
-    return Error::success();
-  }
-
-  m_loader.emplace(*root, passive);
-  if (auto e = m_loader->LoadIndex())
-    return e;
-
-  return Error::success();
-}
-
 FileSpec Reproducer::GetReproducerPath() const {
   if (auto g = GetGenerator())
     return g->GetRoot();
@@ -222,8 +198,7 @@ void Generator::AddProvidersToIndex() {
 }
 
 Loader::Loader(FileSpec root, bool passive)
-    : m_root(MakeAbsolute(std::move(root))), m_loaded(false),
-      m_passive_replay(passive) {}
+    : m_root(MakeAbsolute(std::move(root))), m_loaded(false) {}
 
 llvm::Error Loader::LoadIndex() {
   if (m_loaded)

diff  --git a/lldb/test/API/functionalities/reproducers/attach/TestReproducerAttach.py b/lldb/test/API/functionalities/reproducers/attach/TestReproducerAttach.py
index 8e6dcea957f0d..75372d3409eea 100644
--- a/lldb/test/API/functionalities/reproducers/attach/TestReproducerAttach.py
+++ b/lldb/test/API/functionalities/reproducers/attach/TestReproducerAttach.py
@@ -57,16 +57,6 @@ def test_reproducer_attach(self):
         self.assertIn('Process {} stopped'.format(pid), outs)
         self.assertIn('Reproducer written', outs)
 
-        # Check that replay works.
-        replay = subprocess.Popen(
-            [lldbtest_config.lldbExec, '-replay', reproducer],
-            stdin=subprocess.PIPE,
-            stdout=subprocess.PIPE,
-            stderr=subprocess.PIPE)
-        outs, _ = replay.communicate()
-        outs = outs.decode('utf-8')
-        self.assertIn('Process {} stopped'.format(pid), outs)
-
         # We can dump the reproducer in the current context.
         self.expect('reproducer dump -f {} -p process'.format(reproducer),
                     substrs=['pid = {}'.format(pid), 'name = {}'.format(exe)])

diff  --git a/lldb/test/Shell/Driver/TestHelp.test b/lldb/test/Shell/Driver/TestHelp.test
index 8ce6097cd7410..cfa0825f42cb8 100644
--- a/lldb/test/Shell/Driver/TestHelp.test
+++ b/lldb/test/Shell/Driver/TestHelp.test
@@ -48,7 +48,6 @@ CHECK: -f
 CHECK: --help
 CHECK: -h
 CHECK: --no-use-colors
-CHECK: --replay
 CHECK: --version
 CHECK: -v
 CHECK: -X

diff  --git a/lldb/test/Shell/Reproducer/Functionalities/Inputs/DataFormatter.in b/lldb/test/Shell/Reproducer/Functionalities/Inputs/DataFormatter.in
deleted file mode 100644
index 5c4e821656d76..0000000000000
--- a/lldb/test/Shell/Reproducer/Functionalities/Inputs/DataFormatter.in
+++ /dev/null
@@ -1,7 +0,0 @@
-breakpoint set -f foo.cpp -l 11
-run
-frame var foo
-next
-frame var foo
-cont
-reproducer generate

diff  --git a/lldb/test/Shell/Reproducer/Functionalities/Inputs/ExpressionEvaluation.in b/lldb/test/Shell/Reproducer/Functionalities/Inputs/ExpressionEvaluation.in
deleted file mode 100644
index 8887c201d92e3..0000000000000
--- a/lldb/test/Shell/Reproducer/Functionalities/Inputs/ExpressionEvaluation.in
+++ /dev/null
@@ -1,10 +0,0 @@
-breakpoint set -f foo.cpp -l 11
-run
-p foo
-next
-p Foo(2, 3.33);
-p $1
-p foo = Foo(3, 4.44);
-p foo
-cont
-reproducer generate

diff  --git a/lldb/test/Shell/Reproducer/Functionalities/Inputs/foo.cpp b/lldb/test/Shell/Reproducer/Functionalities/Inputs/foo.cpp
deleted file mode 100644
index 91f27388d0ca1..0000000000000
--- a/lldb/test/Shell/Reproducer/Functionalities/Inputs/foo.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-class Foo {
-public:
-  Foo(int i, double d) : m_i(i), m_d(d){};
-
-private:
-  int m_i;
-  int m_d;
-};
-
-int main(int argc, char **argv) {
-  static Foo foo(1, 2.22);
-  return 0;
-}

diff  --git a/lldb/test/Shell/Reproducer/Functionalities/Inputs/stepping.c b/lldb/test/Shell/Reproducer/Functionalities/Inputs/stepping.c
deleted file mode 100644
index 7b56eb2219342..0000000000000
--- a/lldb/test/Shell/Reproducer/Functionalities/Inputs/stepping.c
+++ /dev/null
@@ -1,37 +0,0 @@
-int a(int);
-int b(int);
-int c(int);
-int complex(int, int, int);
-
-int a(int val) {
-  int return_value = val;
-
-  if (val <= 1) {
-    return_value = b(val);
-  } else if (val >= 3) {
-    return_value = c(val);
-  }
-
-  return return_value;
-}
-
-int b(int val) {
-  int rc = c(val);
-  return rc;
-}
-
-int c(int val) { return val + 3; }
-
-int complex(int first, int second, int third) { return first + second + third; }
-
-int main(int argc, char const *argv[]) {
-  int A1 = a(1);
-
-  int B2 = b(2);
-
-  int A3 = a(3);
-
-  int A4 = complex(a(1), b(2), c(3));
-
-  return 0;
-}

diff  --git a/lldb/test/Shell/Reproducer/Functionalities/TestDataFormatter.test b/lldb/test/Shell/Reproducer/Functionalities/TestDataFormatter.test
deleted file mode 100644
index d133c8d3b9f9e..0000000000000
--- a/lldb/test/Shell/Reproducer/Functionalities/TestDataFormatter.test
+++ /dev/null
@@ -1,16 +0,0 @@
-# UNSUPPORTED: system-freebsd
-
-# This tests that data formatters continue to work when replaying a reproducer.
-
-# RUN: rm -rf %t.repro
-# RUN: %clangxx_host %S/Inputs/foo.cpp -g -o %t.out
-
-# RUN: %lldb -x -b -s %S/Inputs/DataFormatter.in --capture --capture-path %t.repro %t.out | FileCheck %s
-# RUN: %lldb --replay %t.repro | FileCheck %s
-
-# CHECK: stop reason = breakpoint 1.1
-# CHECK: (Foo) foo = (m_i = 0, m_d = 0)
-# CHECK: stop reason = step over
-# CHECK: (Foo) foo = (m_i = 1, m_d = 2)
-# CHECK: Process {{.*}} resuming
-# CHECK: Process {{.*}} exited with status = 0

diff  --git a/lldb/test/Shell/Reproducer/Functionalities/TestExpressionEvaluation.test b/lldb/test/Shell/Reproducer/Functionalities/TestExpressionEvaluation.test
deleted file mode 100644
index e20be15386a72..0000000000000
--- a/lldb/test/Shell/Reproducer/Functionalities/TestExpressionEvaluation.test
+++ /dev/null
@@ -1,22 +0,0 @@
-# UNSUPPORTED: system-freebsd
-# UNSUPPORTED: system-netbsd
-
-# Flaky
-# UNSUPPORTED: system-linux
-
-# This tests that expression evaluation continues to work when replaying a
-# reproducer.
-
-# RUN: rm -rf %t.repro
-# RUN: %clangxx_host %S/Inputs/foo.cpp -g -o %t.out
-
-# RUN: %lldb -x -b -s %S/Inputs/ExpressionEvaluation.in --capture --capture-path %t.repro %t.out | FileCheck %s
-# RUN: %lldb --replay %t.repro | FileCheck %s
-
-# CHECK: stop reason = breakpoint 1.1
-# CHECK: (Foo) $0 = (m_i = 0, m_d = 0)
-# CHECK: stop reason = step over
-# CHECK: (Foo) $1 = (m_i = 2, m_d = 3)
-# CHECK: (Foo) $1 = (m_i = 2, m_d = 3)
-# CHECK: (Foo) $2 = (m_i = 3, m_d = 4)
-# CHECK: (Foo) $3 = (m_i = 3, m_d = 4)

diff  --git a/lldb/test/Shell/Reproducer/Functionalities/TestImageList.test b/lldb/test/Shell/Reproducer/Functionalities/TestImageList.test
deleted file mode 100644
index e630e4666d087..0000000000000
--- a/lldb/test/Shell/Reproducer/Functionalities/TestImageList.test
+++ /dev/null
@@ -1,31 +0,0 @@
-# UNSUPPORTED: system-freebsd
-
-# This tests that image list works when replaying. We arbitrarily assume
-# there's at least two entries and compare that they're identical.
-
-# RUN: %clang_host %S/Inputs/stepping.c -g -o %t.out
-
-# RUN: rm -rf %t.txt
-# RUN: rm -rf %t.repro
-
-# RUN: echo "CAPTURE" >> %t.txt
-# RUN: %lldb -x -b  --capture --capture-path %t.repro \
-# RUN:    -o 'run' \
-# RUN:    -o 'image list' \
-# RUN:    -o 'reproducer generate' \
-# RUN:    %t.out >> %t.txt 2>&1
-
-# RUN: echo "REPLAY" >> %t.txt
-# RUN: %lldb -x -b --replay %t.repro >> %t.txt 2>&1
-
-# RUN: cat %t.txt | FileCheck %s
-
-# CHECK: CAPTURE
-# CHECK: image list
-# CHECK: [  0] [[ZERO:.*]]
-# CHECK: [  1] [[ONE:.*]]
-
-# CHECK: REPLAY
-# CHECK: image list
-# CHECK: [  0] {{.*}}[[ZERO]]
-# CHECK: [  1] {{.*}}[[ONE]]

diff  --git a/lldb/test/Shell/Reproducer/Functionalities/TestStepping.test b/lldb/test/Shell/Reproducer/Functionalities/TestStepping.test
deleted file mode 100644
index ba9164f4b43a9..0000000000000
--- a/lldb/test/Shell/Reproducer/Functionalities/TestStepping.test
+++ /dev/null
@@ -1,100 +0,0 @@
-# UNSUPPORTED: system-freebsd
-
-# This tests that stepping continues to work when replaying a reproducer.
-
-# RUN: rm -rf %t.repro
-# RUN: %clang_host %S/Inputs/stepping.c -O0 -g -o %t.out
-# RUN: grep -v '#' %s > %t.in
-
-# RUN: %lldb -x -b -s %t.in --capture --capture-path %t.repro %t.out | FileCheck %s --check-prefix CHECK
-# RUN: %lldb --replay %t.repro | FileCheck %s --check-prefix CHECK
-
-# Set breakpoints in a,b and c and verify we stop there when stepping.
-
-breakpoint set -f stepping.c -l 28
-# CHECK: Breakpoint 1: {{.*}} stepping.c:28
-
-breakpoint set -f stepping.c -l 10
-# CHECK: Breakpoint 2: {{.*}} stepping.c:10
-
-breakpoint set -f stepping.c -l 19
-# CHECK: Breakpoint 3: {{.*}} stepping.c:19
-
-breakpoint set -f stepping.c -l 23
-# CHECK: Breakpoint 4: {{.*}} stepping.c:23
-
-run
-# CHECK: Process {{.*}} stopped
-# CHECK: stop reason = breakpoint 1.1
-
-next
-# CHECK: Process {{.*}} stopped
-# CHECK: stop reason = breakpoint 2.1
-
-next
-# CHECK: Process {{.*}} stopped
-# CHECK: stop reason = breakpoint 3.1
-
-next
-# CHECK: Process {{.*}} stopped
-# CHECK: stop reason = breakpoint 4.1
-
-bt
-# CHECK: frame #0: {{.*}}`c
-# CHECK: frame #1: {{.*}}`b
-# CHECK: frame #2: {{.*}}`a
-
-# Continue and stop resulting from the step overs.
-
-cont
-# CHECK: Process {{.*}} resuming
-# CHECK: Process {{.*}} stopped
-# CHECK: stop reason = step over
-cont
-# CHECK: Process {{.*}} resuming
-# CHECK: Process {{.*}} stopped
-# CHECK: stop reason = step over
-cont
-# CHECK: Process {{.*}} resuming
-# CHECK: Process {{.*}} stopped
-# CHECK: stop reason = step over
-
-breakpoint disable 1
-# CHECK: 1 breakpoints disabled.
-
-breakpoint disable 2
-# CHECK: 1 breakpoints disabled.
-
-breakpoint disable 3
-# CHECK: 1 breakpoints disabled.
-
-breakpoint disable 4
-# CHECK: 1 breakpoints disabled.
-
-# Continue to line 48.
-
-next
-# CHECK: stop reason = step over
-next
-# CHECK: stop reason = step over
-
-# Step into c.
-thread step-in
-# CHECK: stop reason = step in
-thread step-in
-# CHECK: stop reason = step in
-thread step-in
-# CHECK: stop reason = step in
-thread step-in
-# CHECK: stop reason = step in
-thread step-in
-# CHECK: stop reason = step in
-
-# Finally continue until the end.
-
-cont
-# CHECK: Process {{.*}} resuming
-# CHECK: Process {{.*}} exited with status = 0
-
-# Generate the reproducer.
-reproducer generate

diff  --git a/lldb/test/Shell/Reproducer/Modules/TestModuleCXX.test b/lldb/test/Shell/Reproducer/Modules/TestModuleCXX.test
index 67a11d4539f19..5d02c7ef08a2e 100644
--- a/lldb/test/Shell/Reproducer/Modules/TestModuleCXX.test
+++ b/lldb/test/Shell/Reproducer/Modules/TestModuleCXX.test
@@ -31,7 +31,3 @@
 # RUN: rm -rf %t.root
 # RUN: rm -rf %t.clang-cache
 # RUN: rm -rf %t.lldb-cache
-
-# Replay the debug session.
-# RUN: %lldb -x -b -o 'settings set symbols.clang-modules-cache-path %t.lldb-cache' -s %S/Inputs/ModuleCXX.in --replay %t.repro %t.root/a.out | FileCheck %s --check-prefix REPLAY
-# REPLAY: (success = 0)

diff  --git a/lldb/test/Shell/Reproducer/TestDriverOptions.test b/lldb/test/Shell/Reproducer/TestDriverOptions.test
index ccdccb3c9411c..0843c512c1e0b 100644
--- a/lldb/test/Shell/Reproducer/TestDriverOptions.test
+++ b/lldb/test/Shell/Reproducer/TestDriverOptions.test
@@ -1,10 +1,8 @@
 # Check that errors are propagated to the driver.
 #
 # RUN: not %lldb --capture --capture-path %t/bogus/bogus 2>&1 | FileCheck %s --check-prefix INVALID-CAPTURE
-# RUN: not %lldb --replay %t/bogus/bogus  2>&1 | FileCheck %s --check-prefix INVALID-REPLAY
 #
 # INVALID-CAPTURE: unable to create reproducer directory
-# INVALID-REPLAY: unable to load reproducer index
 
 # Check that all option combination work as expected.
 #

diff  --git a/lldb/test/Shell/Reproducer/TestDump.test b/lldb/test/Shell/Reproducer/TestDump.test
index cf2c89c938b7d..9c14207f8ec33 100644
--- a/lldb/test/Shell/Reproducer/TestDump.test
+++ b/lldb/test/Shell/Reproducer/TestDump.test
@@ -22,8 +22,6 @@
 # GDB: send packet: $QStartNoAckMode#b0
 # GDB: read packet: $OK#9a
 
-# RUN: %lldb --replay %t.repro | FileCheck %s --check-prefix FILES
-
 # RUN: rm %t.repro/gdb-remote.yaml
 # RUN: not %lldb -b -o 'reproducer dump -p gdb -f %t.repro' 2>&1 | FileCheck %s --check-prefix GDB-ERROR
 # GDB-ERROR: error: Unable to create GDB loader.

diff  --git a/lldb/test/Shell/Reproducer/TestFileRepro.test b/lldb/test/Shell/Reproducer/TestFileRepro.test
index 0fc3d528445f8..3fffc89f0a618 100644
--- a/lldb/test/Shell/Reproducer/TestFileRepro.test
+++ b/lldb/test/Shell/Reproducer/TestFileRepro.test
@@ -10,15 +10,10 @@
 # RUN: %clang_host %S/Inputs/simple.c -g -o %t.out
 # RUN: %lldb -x -b -s %S/Inputs/FileCapture.in --capture --capture-path %t.repro %t.out | FileCheck %s --check-prefix CHECK --check-prefix CAPTURE
 # RUN: rm %t.out
-# RUN: %lldb --replay %t.repro | FileCheck %s --check-prefix CHECK --check-prefix REPLAY
-# RUN: cat %t.repro/version.txt | FileCheck %s --check-prefix VERSION
 
 # CAPTURE: testing
-# REPLAY-NOT: testing
 
 # CHECK: Process {{.*}} exited
 
 # CAPTURE: Reproducer is in capture mode.
 # CAPTURE: Reproducer written
-
-# VERSION: lldb version

diff  --git a/lldb/test/Shell/Reproducer/TestGDBRemoteRepro.test b/lldb/test/Shell/Reproducer/TestGDBRemoteRepro.test
deleted file mode 100644
index 8a6b03c4e22d7..0000000000000
--- a/lldb/test/Shell/Reproducer/TestGDBRemoteRepro.test
+++ /dev/null
@@ -1,29 +0,0 @@
-# UNSUPPORTED: system-freebsd
-
-# This tests the replaying of GDB remote packets.
-#
-# We issue the same commands and ensure the output is identical to the original
-# process. To ensure we're not actually running the original binary we check
-# that the string "testing" is not printed.
-
-# RUN: %clang_host %S/Inputs/simple.c -g -o %t.out
-
-# Test reproducer generate command.
-# RUN: rm -rf %t.repro
-# RUN: %lldb -x -b -s %S/Inputs/GDBRemoteCapture.in --capture --capture-path %t.repro %t.out | FileCheck %s --check-prefix CHECK --check-prefix CAPTURE
-# RUN: env FOO=BAR %lldb --replay %t.repro | FileCheck %s --check-prefix CHECK --check-prefix REPLAY
-
-# CHECK: Breakpoint 1
-# CHECK: Process {{.*}} stopped
-# CHECK: Process {{.*}} launched
-# CHECK: thread {{.*}} stop reason = breakpoint
-# CHECK: frame {{.*}} simple.c
-
-# CAPTURE: testing
-# REPLAY-NOT: testing
-
-# CHECK: Process {{.*}} resuming
-# CHECK: Process {{.*}} exited
-
-# CAPTURE: Reproducer is in capture mode.
-# CAPTURE: Reproducer written

diff  --git a/lldb/test/Shell/Reproducer/TestHomeDir.test b/lldb/test/Shell/Reproducer/TestHomeDir.test
index b4665e54fb6a1..2e330036c8ba8 100644
--- a/lldb/test/Shell/Reproducer/TestHomeDir.test
+++ b/lldb/test/Shell/Reproducer/TestHomeDir.test
@@ -9,6 +9,4 @@
 
 # RUN: cat %t.repro/home.txt | FileCheck %t.check
 # RUN: %lldb -b -o 'reproducer dump -p home -f %t.repro' | FileCheck %t.check
-
-# RUN: %lldb --replay %t.repro | FileCheck %s
 # CHECK: 95126

diff  --git a/lldb/test/Shell/Reproducer/TestMultipleTargets.test b/lldb/test/Shell/Reproducer/TestMultipleTargets.test
deleted file mode 100644
index cb2f766034fd6..0000000000000
--- a/lldb/test/Shell/Reproducer/TestMultipleTargets.test
+++ /dev/null
@@ -1,25 +0,0 @@
-# UNSUPPORTED: system-freebsd
-
-# This tests the replaying with multiple targets.
-
-# RUN: %clang_host %S/Inputs/simple.c -g -o %t.out
-
-# RUN: rm -rf %t.repro
-# RUN: %lldb -x -b --capture --capture-path %t.repro -o 'target create %t.out' -o 'target create %t.out' -s %S/Inputs/MultipleTargetsCapture.in  | FileCheck %s --check-prefix CHECK --check-prefix CAPTURE
-# RUN: env FOO=BAR %lldb --replay %t.repro | FileCheck %s --check-prefix CHECK --check-prefix REPLAY
-
-# CHECK: Process [[TARGET0:[0-9]+]] stopped
-# CHECK: stop reason = breakpoint 1.1
-# CHECK: simple.c:4:5
-# CHECK: Process [[TARGET1:[0-9]+]] stopped
-# CHECK: stop reason = breakpoint 1.1
-# CHECK: simple.c:8:5
-# CHECK: Process [[TARGET0]] resuming
-# CHECK: Process [[TARGET0]] exited
-# CHECK: Process [[TARGET1]] resuming
-# CHECK: Process [[TARGET1]] exited
-
-# CAPTURE: Reproducer is in capture mode.
-# CAPTURE: Reproducer written
-
-# REPLAY:  Reproducer is in replay mode.

diff  --git a/lldb/test/Shell/Reproducer/TestProcessList.test b/lldb/test/Shell/Reproducer/TestProcessList.test
deleted file mode 100644
index 200dcb3febe7b..0000000000000
--- a/lldb/test/Shell/Reproducer/TestProcessList.test
+++ /dev/null
@@ -1,21 +0,0 @@
-# UNSUPPORTED: system-freebsd
-
-# Test that ProcessInfo is correctly serialized by comparing the output of
-# 'platform process list -v' during capture and replay. The test assumes that
-# there's at least two processes.
-
-# RUN: %lldb -x -b -o 'platform process list -v' -o 'reproducer generate' --capture --capture-path %t.repro > %t.log
-# RUN: %lldb --replay %t.repro >> %t.log
-# RUN: cat %t.log | FileCheck %s
-
-# CHECK: [[PROCS:[0-9]+]] matching processes were found
-# CHECK: PID    PARENT USER       GROUP      EFF USER   EFF GROUP  TRIPLE                         ARGUMENTS
-# CHECK-NEXT: ====== ====== ========== ========== ========== ========== ============================== ============================
-# CHECK-NEXT: [[PID0:[0-9]+]] [[PROC0:.*]]
-# CHECK-NEXT: [[PID1:[0-9]+]] [[PROC1:.*]]
-# CHECK: Reproducer written to
-# CHECK: [[PROCS]] matching processes were found
-# CHECK: PID    PARENT USER       GROUP      EFF USER   EFF GROUP  TRIPLE                         ARGUMENTS
-# CHECK-NEXT: ====== ====== ========== ========== ========== ========== ============================== ============================
-# CHECK-NEXT: [[PID0]] [[PROC0]]
-# CHECK-NEXT: [[PID1]] [[PROC1]]

diff  --git a/lldb/test/Shell/Reproducer/TestRelativePath.test b/lldb/test/Shell/Reproducer/TestRelativePath.test
deleted file mode 100644
index fa75187845502..0000000000000
--- a/lldb/test/Shell/Reproducer/TestRelativePath.test
+++ /dev/null
@@ -1,8 +0,0 @@
-# This tests relative capture paths.
-
-# RUN: mkdir -p %t
-# RUN: cd %t
-# RUN: rm -rf ./foo
-# RUN: %clang_host %S/Inputs/simple.c -g -o %t/reproducer.out
-# RUN: %lldb -x -b -s %S/Inputs/FileCapture.in -o 'reproducer dump -p files' --capture --capture-path ./foo %t/reproducer.out
-# RUN: %lldb --replay ./foo

diff  --git a/lldb/test/Shell/Reproducer/TestReuseDirectory.test b/lldb/test/Shell/Reproducer/TestReuseDirectory.test
deleted file mode 100644
index a3fecced2504b..0000000000000
--- a/lldb/test/Shell/Reproducer/TestReuseDirectory.test
+++ /dev/null
@@ -1,17 +0,0 @@
-# UNSUPPORTED: system-freebsd
-
-# Test that we can capture twice to the same directory without breaking the
-# reproducer functionality.
-
-# RUN: rm -rf %t.repro
-# RUN: %clang_host %S/Inputs/simple.c -g -o %t.out
-# RUN: %lldb -x -b -s %S/Inputs/GDBRemoteCapture.in --capture --capture-path %t.repro %t.out | FileCheck %S/TestGDBRemoteRepro.test --check-prefix CHECK --check-prefix CAPTURE
-# RUN: %lldb -x -b -s %S/Inputs/GDBRemoteCapture.in --capture --capture-path %t.repro %t.out | FileCheck %S/TestGDBRemoteRepro.test --check-prefix CHECK --check-prefix CAPTURE
-# RUN: %lldb --replay %t.repro | FileCheck %S/TestGDBRemoteRepro.test --check-prefix CHECK --check-prefix REPLAY
-
-# Test that we can replay from a 
diff erent location, i.e. that the reproducer
-# is relocatable.
-
-# RUN: rm -rf %t.repro_moved
-# RUN: mv %t.repro %t.repro_moved
-# RUN: %lldb --replay %t.repro_moved | FileCheck %S/TestGDBRemoteRepro.test --check-prefix CHECK --check-prefix REPLAY

diff  --git a/lldb/test/Shell/Reproducer/TestSynchronous.test b/lldb/test/Shell/Reproducer/TestSynchronous.test
deleted file mode 100644
index f32ce8c57224f..0000000000000
--- a/lldb/test/Shell/Reproducer/TestSynchronous.test
+++ /dev/null
@@ -1,14 +0,0 @@
-# REQUIRES: python
-# Ensure that replay happens in synchronous mode.
-
-# RUN: rm -rf %t.repro
-# RUN: %lldb -x -b --capture --capture-path %t.repro -o 'script lldb.debugger.SetAsync(True)' -o 'script lldb.debugger.GetAsync()' -o 'reproducer generate' | FileCheck %s --check-prefix CAPTURE
-# RUN: %lldb --replay %t.repro | FileCheck %s --check-prefix REPLAY
-
-# CAPTURE: script lldb.debugger.SetAsync(True)
-# CAPTURE-NEXT: script lldb.debugger.GetAsync()
-# CAPTURE-NEXT: True
-
-# REPLAY: script lldb.debugger.SetAsync(True)
-# REPLAY-NEXT: script lldb.debugger.GetAsync()
-# REPLAY-NEXT: False

diff  --git a/lldb/test/Shell/Reproducer/TestVerify.test b/lldb/test/Shell/Reproducer/TestVerify.test
index 0b34e62aab558..b03a670293faa 100644
--- a/lldb/test/Shell/Reproducer/TestVerify.test
+++ b/lldb/test/Shell/Reproducer/TestVerify.test
@@ -2,7 +2,6 @@
 # RUN: rm -rf %t.repro2
 # RUN: %clang_host %S/Inputs/simple.c -g -o %t.out
 # RUN: %lldb -x -b -s %S/Inputs/GDBRemoteCapture.in --capture --capture-path %t.repro %t.out
-# RUN: %lldb --replay %t.repro
 
 # RUN: echo "/bogus/home/dir" > %t.repro/home.txt
 # RUN: echo "/bogus/current/working/dir" > %t.repro/cwd.txt
@@ -14,14 +13,3 @@
 # RUN: rm %t.repro/root/%S/Inputs/GDBRemoteCapture.in
 # RUN: echo "CHECK: '%S/Inputs/GDBRemoteCapture.in': No such file or directory" > %t.check
 # RUN: not %lldb -b -o 'reproducer verify -f %t.repro' 2>&1 | FileCheck %t.check
-
-# RUN: not %lldb --replay %t.repro 2>&1 | FileCheck %s
-
-# At this point the reproducer is too broken to ignore the verification issues.
-# Capture a new reproducer and only change the home directory, which is
-# recoverable as far as this test goes.
-
-# RUN: %lldb -x -b -s %S/Inputs/GDBRemoteCapture.in --capture --capture-path %t.repro2 %t.out
-# RUN: echo "/bogus/home/dir" > %t.repro2/home.txt
-# RUN: %lldb --replay %t.repro2 --reproducer-no-verify 2>&1 | FileCheck %s --check-prefix NO-VERIFY
-# NO-VERIFY-NOT: home directory '/bogus/home/dir' not in VFS

diff  --git a/lldb/test/Shell/Reproducer/TestVersionCheck.test b/lldb/test/Shell/Reproducer/TestVersionCheck.test
index d37059be6db82..faed9ffb2d9a6 100644
--- a/lldb/test/Shell/Reproducer/TestVersionCheck.test
+++ b/lldb/test/Shell/Reproducer/TestVersionCheck.test
@@ -6,24 +6,12 @@
 # RUN: %clang_host %S/Inputs/simple.c -g -o %t.out
 # RUN: %lldb -x -b -s %S/Inputs/FileCapture.in --capture --capture-path %t.repro %t.out | FileCheck %s --check-prefix CHECK --check-prefix CAPTURE
 
-# Make sure that replay works.
-# RUN: %lldb --replay %t.repro | FileCheck %s --check-prefix CHECK --check-prefix REPLAY
-
 # Change the reproducer version.
 # RUN: echo "bogus" >> %t.repro/version.txt
 
-# Make sure that replay works.
-# RUN: not %lldb --replay %t.repro 2>&1 | FileCheck %s --check-prefix ERROR
-
-# Make sure that we can circumvent the version check with -reproducer-no-version-check.
-# RUN: %lldb --replay %t.repro -reproducer-no-version-check | FileCheck %s --check-prefix CHECK --check-prefix REPLAY
-
 # CAPTURE: testing
-# REPLAY-NOT: testing
 
 # CHECK: Process {{.*}} exited
 
 # CAPTURE: Reproducer is in capture mode.
 # CAPTURE: Reproducer written
-
-# ERROR: error: reproducer replay failed: reproducer capture and replay version don't match

diff  --git a/lldb/test/Shell/Reproducer/TestWorkingDir.test b/lldb/test/Shell/Reproducer/TestWorkingDir.test
index 54266e76c2799..5eb8081086811 100644
--- a/lldb/test/Shell/Reproducer/TestWorkingDir.test
+++ b/lldb/test/Shell/Reproducer/TestWorkingDir.test
@@ -1,6 +1,5 @@
 # This tests that the reproducer can deal with relative files. We create a
-# binary in a subdirectory and pass its relative path to LLDB. The subdirectory
-# is removed before replay so that it only exists in the reproducer's VFS.
+# binary in a subdirectory and pass its relative path to LLDB.
 
 # RUN: echo "CHECK: %t" > %t.check
 
@@ -14,7 +13,6 @@
 # RUN: rm -rf %t/binary
 
 # RUN: cat %t.repro/cwd.txt | FileCheck %t.check
-# RUN: %lldb --replay %t.repro | FileCheck %t.check
 
 # Make sure the current working directory is recorded even when it's not
 # referenced.

diff  --git a/lldb/tools/driver/Driver.cpp b/lldb/tools/driver/Driver.cpp
index 86a74ae285e80..2ed9958e51da9 100644
--- a/lldb/tools/driver/Driver.cpp
+++ b/lldb/tools/driver/Driver.cpp
@@ -736,18 +736,6 @@ static void printHelp(LLDBOptTable &table, llvm::StringRef tool_name) {
 
 static llvm::Optional<int> InitializeReproducer(llvm::StringRef argv0,
                                                 opt::InputArgList &input_args) {
-  if (auto *replay_path = input_args.getLastArg(OPT_replay)) {
-    SBReplayOptions replay_options;
-    replay_options.SetCheckVersion(!input_args.hasArg(OPT_no_version_check));
-    replay_options.SetVerify(!input_args.hasArg(OPT_no_verification));
-    if (const char *error =
-            SBReproducer::Replay(replay_path->getValue(), replay_options)) {
-      WithColor::error() << "reproducer replay failed: " << error << '\n';
-      return 1;
-    }
-    return 0;
-  }
-
   bool capture = input_args.hasArg(OPT_capture);
   bool generate_on_exit = input_args.hasArg(OPT_generate_on_exit);
   auto *capture_path = input_args.getLastArg(OPT_capture_path);

diff  --git a/lldb/tools/driver/Options.td b/lldb/tools/driver/Options.td
index 3d29746740378..9e6ee390eead2 100644
--- a/lldb/tools/driver/Options.td
+++ b/lldb/tools/driver/Options.td
@@ -233,15 +233,6 @@ def capture: F<"capture">,
 def capture_path: Separate<["--", "-"], "capture-path">,
   MetaVarName<"<filename>">,
   HelpText<"Tells the debugger to use the given filename for the reproducer.">;
-def replay: Separate<["--", "-"], "replay">,
-  MetaVarName<"<filename>">,
-  HelpText<"Tells the debugger to replay a reproducer from <filename>.">;
-def no_version_check: F<"reproducer-no-version-check">,
-  HelpText<"Disable the reproducer version check.">;
-def no_verification: F<"reproducer-no-verify">,
-  HelpText<"Disable the reproducer verification.">;
-def no_generate_on_signal: F<"reproducer-no-generate-on-signal">,
-  HelpText<"Don't generate reproducer when a signal is received.">;
 def generate_on_exit: F<"reproducer-generate-on-exit">,
   HelpText<"Generate reproducer on exit.">;
 

diff  --git a/lldb/unittests/Utility/ReproducerTest.cpp b/lldb/unittests/Utility/ReproducerTest.cpp
index b276de3bf1af5..71130bee736a2 100644
--- a/lldb/unittests/Utility/ReproducerTest.cpp
+++ b/lldb/unittests/Utility/ReproducerTest.cpp
@@ -57,7 +57,6 @@ class DummyReproducer : public Reproducer {
   DummyReproducer() : Reproducer(){};
 
   using Reproducer::SetCapture;
-  using Reproducer::SetReplay;
 };
 
 struct YamlData {
@@ -98,9 +97,6 @@ TEST(ReproducerTest, SetCapture) {
             reproducer.GetReproducerPath());
 
   // Ensure that we cannot enable replay.
-  EXPECT_THAT_ERROR(
-      reproducer.SetReplay(FileSpec("//bogus/path", FileSpec::Style::posix)),
-      Failed());
   EXPECT_EQ(nullptr, reproducer.GetLoader());
 
   // Ensure we can disable the generator again.
@@ -109,33 +105,6 @@ TEST(ReproducerTest, SetCapture) {
   EXPECT_EQ(nullptr, reproducer.GetLoader());
 }
 
-TEST(ReproducerTest, SetReplay) {
-  DummyReproducer reproducer;
-
-  // Initially both generator and loader are unset.
-  EXPECT_EQ(nullptr, reproducer.GetGenerator());
-  EXPECT_EQ(nullptr, reproducer.GetLoader());
-
-  // Expected to fail because we can't load the index.
-  EXPECT_THAT_ERROR(
-      reproducer.SetReplay(FileSpec("//bogus/path", FileSpec::Style::posix)),
-      Failed());
-  // However the loader should still be set, which we check here.
-  EXPECT_NE(nullptr, reproducer.GetLoader());
-
-  // Make sure the bogus path is correctly set.
-  EXPECT_EQ(FileSpec("//bogus/path", FileSpec::Style::posix),
-            reproducer.GetLoader()->GetRoot());
-  EXPECT_EQ(FileSpec("//bogus/path", FileSpec::Style::posix),
-            reproducer.GetReproducerPath());
-
-  // Ensure that we cannot enable replay.
-  EXPECT_THAT_ERROR(
-      reproducer.SetCapture(FileSpec("//bogus/path", FileSpec::Style::posix)),
-      Failed());
-  EXPECT_EQ(nullptr, reproducer.GetGenerator());
-}
-
 TEST(GeneratorTest, Create) {
   DummyReproducer reproducer;
 
@@ -214,49 +183,4 @@ TEST(GeneratorTest, YamlMultiProvider) {
 
     generator.Keep();
   }
-
-  {
-    DummyReproducer reproducer;
-    EXPECT_THAT_ERROR(reproducer.SetReplay(FileSpec(root.str())), Succeeded());
-
-    auto &loader = *reproducer.GetLoader();
-    std::unique_ptr<repro::MultiLoader<YamlMultiProvider>> multi_loader =
-        repro::MultiLoader<YamlMultiProvider>::Create(&loader);
-
-    // Read the first file.
-    {
-      llvm::Optional<std::string> file = multi_loader->GetNextFile();
-      EXPECT_TRUE(static_cast<bool>(file));
-
-      auto buffer = llvm::MemoryBuffer::getFile(*file);
-      EXPECT_TRUE(static_cast<bool>(buffer));
-
-      yaml::Input yin((*buffer)->getBuffer());
-      std::vector<YamlData> data;
-      yin >> data;
-
-      ASSERT_EQ(data.size(), 2U);
-      EXPECT_THAT(data, testing::ElementsAre(data0, data1));
-    }
-
-    // Read the second file.
-    {
-      llvm::Optional<std::string> file = multi_loader->GetNextFile();
-      EXPECT_TRUE(static_cast<bool>(file));
-
-      auto buffer = llvm::MemoryBuffer::getFile(*file);
-      EXPECT_TRUE(static_cast<bool>(buffer));
-
-      yaml::Input yin((*buffer)->getBuffer());
-      std::vector<YamlData> data;
-      yin >> data;
-
-      ASSERT_EQ(data.size(), 2U);
-      EXPECT_THAT(data, testing::ElementsAre(data2, data3));
-    }
-
-    // There is no third file.
-    llvm::Optional<std::string> file = multi_loader->GetNextFile();
-    EXPECT_FALSE(static_cast<bool>(file));
-  }
 }


        


More information about the lldb-commits mailing list