diff --git a/lldb/include/lldb/Utility/Reproducer.h b/lldb/include/lldb/Utility/Reproducer.h index 2714db8d29326b..6fcb839684dc2c 100644 --- a/lldb/include/lldb/Utility/Reproducer.h +++ b/lldb/include/lldb/Utility/Reproducer.h @@ -11,6 +11,7 @@ #include "lldb/Utility/FileSpec.h" #include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/StringRef.h" #include "llvm/Support/Error.h" #include "llvm/Support/FileCollector.h" #include "llvm/Support/YAMLTraits.h" @@ -149,6 +150,7 @@ class WorkingDirectoryProvider : public Provider { } void Update(llvm::StringRef path) { m_cwd = std::string(path); } + llvm::StringRef GetWorkingDirectory() { return m_cwd; } struct Info { static const char *name; diff --git a/lldb/source/API/SBReproducer.cpp b/lldb/source/API/SBReproducer.cpp index 0eb3429c4fefc8..9815bf11263c50 100644 --- a/lldb/source/API/SBReproducer.cpp +++ b/lldb/source/API/SBReproducer.cpp @@ -234,7 +234,10 @@ const char *SBReproducer::GetPath() { void SBReproducer::SetWorkingDirectory(const char *path) { if (auto *g = lldb_private::repro::Reproducer::Instance().GetGenerator()) { - g->GetOrCreate().Update(path); + auto &wp = g->GetOrCreate(); + wp.Update(path); + auto &fp = g->GetOrCreate(); + fp.RecordInterestingDirectory(wp.GetWorkingDirectory()); } } diff --git a/lldb/source/Initialization/SystemInitializerCommon.cpp b/lldb/source/Initialization/SystemInitializerCommon.cpp index 0cef2a48dcb469..3d07f92259bebc 100644 --- a/lldb/source/Initialization/SystemInitializerCommon.cpp +++ b/lldb/source/Initialization/SystemInitializerCommon.cpp @@ -94,6 +94,8 @@ llvm::Error SystemInitializerCommon::Initialize() { vp.SetVersion(lldb_private::GetVersion()); repro::FileProvider &fp = g->GetOrCreate(); FileSystem::Initialize(fp.GetFileCollector()); + repro::WorkingDirectoryProvider &wp = g->GetOrCreate(); + fp.RecordInterestingDirectory(wp.GetWorkingDirectory()); } else { FileSystem::Initialize(); } diff --git a/lldb/test/Shell/Reproducer/TestWorkingDir.test b/lldb/test/Shell/Reproducer/TestWorkingDir.test index 1d4c7694211aff..76df41fbcbbf4e 100644 --- a/lldb/test/Shell/Reproducer/TestWorkingDir.test +++ b/lldb/test/Shell/Reproducer/TestWorkingDir.test @@ -15,3 +15,13 @@ # 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. + +# RUN: rm -rf %t.repro +# RUN: mkdir -p %t/probably_unique +# RUN: cd %t/probably_unique +# RUN: %lldb -x -b -o 'reproducer generate' --capture --capture-path %t.repro +# RUN: cat %t.repro/cwd.txt | FileCheck %s +# CHECK: probably_unique