Author: Alex Langford Date: 2026-08-07T11:00:14-07:00 New Revision: af0e709e29b1745f7fc182a2433ef9a86227b285
URL: https://github.com/llvm/llvm-project/commit/af0e709e29b1745f7fc182a2433ef9a86227b285 DIFF: https://github.com/llvm/llvm-project/commit/af0e709e29b1745f7fc182a2433ef9a86227b285.diff LOG: Reapply "[lldb] Remove ConstString from FileSpec" (#211927) (#214599) This reverts commit 3af6879ba3d68d485e5e4e753223e4ed7a283df5. I've re-run the tests on with ASAN and UBSAN to detect any potential issues. On my M5 machine it does not introduce any new regressions in the test suite. Added: Modified: lldb/include/lldb/Host/HostInfoBase.h lldb/include/lldb/Utility/FileSpec.h lldb/source/API/SBBroadcaster.cpp lldb/source/API/SBCommunication.cpp lldb/source/API/SBData.cpp lldb/source/API/SBFileSpec.cpp lldb/source/API/SBLaunchInfo.cpp lldb/source/API/SBProcessInfo.cpp lldb/source/API/SBSaveCoreOptions.cpp lldb/source/API/SBStream.cpp lldb/source/API/SBStringList.cpp lldb/source/Plugins/ObjectContainer/Big-Archive/ObjectContainerBigArchive.h lldb/source/Target/Statistics.cpp lldb/source/Utility/FileSpec.cpp lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp Removed: ################################################################################ diff --git a/lldb/include/lldb/Host/HostInfoBase.h b/lldb/include/lldb/Host/HostInfoBase.h index 3074a97a6fac1..0f1f8c1d76367 100644 --- a/lldb/include/lldb/Host/HostInfoBase.h +++ b/lldb/include/lldb/Host/HostInfoBase.h @@ -10,6 +10,7 @@ #define LLDB_HOST_HOSTINFOBASE_H #include "lldb/Utility/ArchSpec.h" +#include "lldb/Utility/ConstString.h" #include "lldb/Utility/DataExtractor.h" #include "lldb/Utility/FileSpec.h" #include "lldb/Utility/UUID.h" diff --git a/lldb/include/lldb/Utility/FileSpec.h b/lldb/include/lldb/Utility/FileSpec.h index 7d45acdb81476..c5e5151590f0b 100644 --- a/lldb/include/lldb/Utility/FileSpec.h +++ b/lldb/include/lldb/Utility/FileSpec.h @@ -13,8 +13,7 @@ #include <optional> #include <string> -#include "lldb/Utility/ConstString.h" - +#include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/FormatVariadic.h" @@ -406,6 +405,9 @@ class FileSpec { std::vector<llvm::StringRef> GetComponents() const; protected: + static constexpr size_t directory_size = 256; + static constexpr size_t filename_size = 32; + // Convenience method for setting the file without changing the style. void SetFile(llvm::StringRef path); @@ -416,10 +418,10 @@ class FileSpec { enum class Absolute : uint8_t { Calculate, Yes, No }; /// The unique'd directory path. - ConstString m_directory; + llvm::SmallString<directory_size> m_directory; /// The unique'd filename path. - ConstString m_filename; + llvm::SmallString<filename_size> m_filename; /// Cache whether this path is absolute. mutable Absolute m_absolute = Absolute::Calculate; diff --git a/lldb/source/API/SBBroadcaster.cpp b/lldb/source/API/SBBroadcaster.cpp index 6e34b2f71b824..7c766e5ab8658 100644 --- a/lldb/source/API/SBBroadcaster.cpp +++ b/lldb/source/API/SBBroadcaster.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "lldb/Utility/Broadcaster.h" +#include "lldb/Utility/ConstString.h" #include "lldb/Utility/Instrumentation.h" #include "lldb/API/SBBroadcaster.h" diff --git a/lldb/source/API/SBCommunication.cpp b/lldb/source/API/SBCommunication.cpp index 565b37f52b34a..c54871540e18f 100644 --- a/lldb/source/API/SBCommunication.cpp +++ b/lldb/source/API/SBCommunication.cpp @@ -11,6 +11,7 @@ #include "lldb/Core/ThreadedCommunication.h" #include "lldb/Host/ConnectionFileDescriptor.h" #include "lldb/Host/Host.h" +#include "lldb/Utility/ConstString.h" #include "lldb/Utility/Instrumentation.h" using namespace lldb; diff --git a/lldb/source/API/SBData.cpp b/lldb/source/API/SBData.cpp index 924a4cdb93bfb..46aa7ab232475 100644 --- a/lldb/source/API/SBData.cpp +++ b/lldb/source/API/SBData.cpp @@ -12,6 +12,7 @@ #include "lldb/Utility/Instrumentation.h" #include "lldb/Core/DumpDataExtractor.h" +#include "lldb/Utility/ConstString.h" #include "lldb/Utility/DataBufferHeap.h" #include "lldb/Utility/DataExtractor.h" #include "lldb/Utility/Stream.h" diff --git a/lldb/source/API/SBFileSpec.cpp b/lldb/source/API/SBFileSpec.cpp index 842f547f31875..d34cd06300744 100644 --- a/lldb/source/API/SBFileSpec.cpp +++ b/lldb/source/API/SBFileSpec.cpp @@ -11,6 +11,7 @@ #include "lldb/API/SBStream.h" #include "lldb/Host/FileSystem.h" #include "lldb/Host/PosixApi.h" +#include "lldb/Utility/ConstString.h" #include "lldb/Utility/FileSpec.h" #include "lldb/Utility/Instrumentation.h" #include "lldb/Utility/Stream.h" diff --git a/lldb/source/API/SBLaunchInfo.cpp b/lldb/source/API/SBLaunchInfo.cpp index 572590f4cae76..fabfc66daa3eb 100644 --- a/lldb/source/API/SBLaunchInfo.cpp +++ b/lldb/source/API/SBLaunchInfo.cpp @@ -17,6 +17,7 @@ #include "lldb/API/SBStructuredData.h" #include "lldb/Core/StructuredDataImpl.h" #include "lldb/Host/ProcessLaunchInfo.h" +#include "lldb/Utility/ConstString.h" #include "lldb/Utility/Listener.h" #include "lldb/Utility/ScriptedMetadata.h" diff --git a/lldb/source/API/SBProcessInfo.cpp b/lldb/source/API/SBProcessInfo.cpp index 4e0f73ae5b010..0f341768b6172 100644 --- a/lldb/source/API/SBProcessInfo.cpp +++ b/lldb/source/API/SBProcessInfo.cpp @@ -9,6 +9,7 @@ #include "lldb/API/SBProcessInfo.h" #include "Utils.h" #include "lldb/API/SBFileSpec.h" +#include "lldb/Utility/ConstString.h" #include "lldb/Utility/Instrumentation.h" #include "lldb/Utility/ProcessInfo.h" diff --git a/lldb/source/API/SBSaveCoreOptions.cpp b/lldb/source/API/SBSaveCoreOptions.cpp index 83555c82a980f..2ae7e1bed7d5b 100644 --- a/lldb/source/API/SBSaveCoreOptions.cpp +++ b/lldb/source/API/SBSaveCoreOptions.cpp @@ -11,6 +11,7 @@ #include "lldb/Host/FileSystem.h" #include "lldb/Symbol/SaveCoreOptions.h" #include "lldb/Target/ThreadCollection.h" +#include "lldb/Utility/ConstString.h" #include "lldb/Utility/Instrumentation.h" #include "Utils.h" diff --git a/lldb/source/API/SBStream.cpp b/lldb/source/API/SBStream.cpp index 2fc5fcfa8b0c4..128ee6b50b232 100644 --- a/lldb/source/API/SBStream.cpp +++ b/lldb/source/API/SBStream.cpp @@ -11,6 +11,7 @@ #include "lldb/API/SBFile.h" #include "lldb/Host/FileSystem.h" #include "lldb/Host/StreamFile.h" +#include "lldb/Utility/ConstString.h" #include "lldb/Utility/Instrumentation.h" #include "lldb/Utility/LLDBLog.h" #include "lldb/Utility/Status.h" diff --git a/lldb/source/API/SBStringList.cpp b/lldb/source/API/SBStringList.cpp index 350c58b61634c..9e49db940e1e8 100644 --- a/lldb/source/API/SBStringList.cpp +++ b/lldb/source/API/SBStringList.cpp @@ -8,6 +8,7 @@ #include "lldb/API/SBStringList.h" #include "Utils.h" +#include "lldb/Utility/ConstString.h" #include "lldb/Utility/Instrumentation.h" #include "lldb/Utility/StringList.h" diff --git a/lldb/source/Plugins/ObjectContainer/Big-Archive/ObjectContainerBigArchive.h b/lldb/source/Plugins/ObjectContainer/Big-Archive/ObjectContainerBigArchive.h index ea50e6bc0e7f9..0c4aedca61a2e 100644 --- a/lldb/source/Plugins/ObjectContainer/Big-Archive/ObjectContainerBigArchive.h +++ b/lldb/source/Plugins/ObjectContainer/Big-Archive/ObjectContainerBigArchive.h @@ -11,6 +11,7 @@ #include "lldb/Symbol/ObjectContainer.h" #include "lldb/Utility/ArchSpec.h" +#include "lldb/Utility/ConstString.h" #include "lldb/Utility/DataExtractor.h" #include "lldb/Utility/FileSpec.h" diff --git a/lldb/source/Target/Statistics.cpp b/lldb/source/Target/Statistics.cpp index 9fee5108e736a..58236b4020858 100644 --- a/lldb/source/Target/Statistics.cpp +++ b/lldb/source/Target/Statistics.cpp @@ -211,8 +211,8 @@ TargetStats::ToJSON(Target &target, target_metrics_json.try_emplace("dyldPluginName", dyld_plugin_name); if (process_sp->GetCoreFile()) - target_metrics_json.try_emplace("coreFile", - process_sp->GetCoreFile().GetFilename()); + target_metrics_json.try_emplace( + "coreFile", process_sp->GetCoreFile().GetFilename().str()); } target_metrics_json.try_emplace("sourceMapDeduceCount", m_source_map_deduce_count); diff --git a/lldb/source/Utility/FileSpec.cpp b/lldb/source/Utility/FileSpec.cpp index 52d94d04c1e85..0703adfbc8440 100644 --- a/lldb/source/Utility/FileSpec.cpp +++ b/lldb/source/Utility/FileSpec.cpp @@ -192,19 +192,19 @@ void FileSpec::SetFile(llvm::StringRef pathname, Style style) { // If we have no path after normalization set the path to the current // directory. This matches what python does and also a few other path // utilities. - m_filename.SetString("."); + m_filename = "."; return; } // Split path into filename and directory. We rely on the underlying char // pointer to be nullptr when the components are empty. llvm::StringRef filename = llvm::sys::path::filename(resolved, m_style); - if(!filename.empty()) - m_filename.SetString(filename); + if (!filename.empty()) + m_filename = filename; llvm::StringRef directory = llvm::sys::path::parent_path(resolved, m_style); - if(!directory.empty()) - m_directory.SetString(directory); + if (!directory.empty()) + m_directory = directory; } void FileSpec::SetFile(llvm::StringRef path, const llvm::Triple &triple) { @@ -216,14 +216,18 @@ void FileSpec::SetFile(llvm::StringRef path, const llvm::Triple &triple) { // // if (file_spec) // {} -FileSpec::operator bool() const { return m_filename || m_directory; } +FileSpec::operator bool() const { + return !m_filename.empty() || !m_directory.empty(); +} // Logical NOT operator. This allows code to check any FileSpec objects to see // if they are invalid using code such as: // // if (!file_spec) // {} -bool FileSpec::operator!() const { return !m_directory && !m_filename; } +bool FileSpec::operator!() const { + return m_directory.empty() && m_filename.empty(); +} bool FileSpec::DirectoryEquals(const FileSpec &rhs) const { if (IsCaseSensitive() || rhs.IsCaseSensitive()) @@ -259,8 +263,8 @@ Stream &lldb_private::operator<<(Stream &s, const FileSpec &f) { // Clear this object by releasing both the directory and filename string values // and making them both the empty string. void FileSpec::Clear() { - m_directory.Clear(); - m_filename.Clear(); + m_directory.clear(); + m_filename.clear(); PathWasModified(); } @@ -285,7 +289,7 @@ int FileSpec::Compare(const FileSpec &a, const FileSpec &b, bool full) { // full compare. This allows for matching when we just have a filename in one // of the FileSpec objects. - if (full || (a.m_directory && b.m_directory)) { + if (full || (!a.m_directory.empty() && !b.m_directory.empty())) { if (case_sensitive) result = a.GetDirectory().compare(b.GetDirectory()); else @@ -338,7 +342,7 @@ void FileSpec::Dump(llvm::raw_ostream &s) const { std::string path{GetPath(true)}; s << path; char path_separator = GetPreferredPathSeparator(m_style); - if (!m_filename && !path.empty() && path.back() != path_separator) + if (m_filename.empty() && !path.empty() && path.back() != path_separator) s << path_separator; } @@ -352,22 +356,22 @@ llvm::json::Value FileSpec::ToJSON() const { FileSpec::Style FileSpec::GetPathStyle() const { return m_style; } void FileSpec::SetDirectory(llvm::StringRef directory) { - m_directory = ConstString(directory); + m_directory = directory; PathWasModified(); } void FileSpec::SetFilename(llvm::StringRef filename) { - m_filename = ConstString(filename); + m_filename = filename; PathWasModified(); } void FileSpec::ClearFilename() { - m_filename.Clear(); + m_filename.clear(); PathWasModified(); } void FileSpec::ClearDirectory() { - m_directory.Clear(); + m_directory.clear(); PathWasModified(); } @@ -391,32 +395,30 @@ std::string FileSpec::GetPath(bool denormalize) const { void FileSpec::GetPath(llvm::SmallVectorImpl<char> &path, bool denormalize) const { - path.append(m_directory.GetStringRef().begin(), - m_directory.GetStringRef().end()); + path.append(m_directory.begin(), m_directory.end()); // Since the path was normalized and all paths use '/' when stored in these // objects, we don't need to look for the actual syntax specific path // separator, we just look for and insert '/'. - if (m_directory && m_filename && m_directory.GetStringRef().back() != '/' && - m_filename.GetStringRef().back() != '/') + if (!m_directory.empty() && !m_filename.empty() && + m_directory.back() != '/' && m_filename.back() != '/') path.insert(path.end(), '/'); - path.append(m_filename.GetStringRef().begin(), - m_filename.GetStringRef().end()); + path.append(m_filename.begin(), m_filename.end()); if (denormalize && !path.empty()) Denormalize(path, m_style); } llvm::StringRef FileSpec::GetFileNameExtension() const { - return llvm::sys::path::extension(m_filename.GetStringRef(), m_style); + return llvm::sys::path::extension(m_filename, m_style); } llvm::StringRef FileSpec::GetFileNameStrippingExtension() const { - return llvm::sys::path::stem(m_filename.GetStringRef(), m_style); + return llvm::sys::path::stem(m_filename, m_style); } // Return the size in bytes that this object takes in memory. This returns the // size in bytes of this object, not any shared string values it may refer to. size_t FileSpec::MemorySize() const { - return m_filename.MemorySize() + m_directory.MemorySize(); + return m_filename.size() + m_directory.size(); } FileSpec @@ -473,8 +475,8 @@ bool FileSpec::RemoveLastPathComponent() { std::vector<llvm::StringRef> FileSpec::GetComponents() const { std::vector<llvm::StringRef> components; - auto dir_begin = llvm::sys::path::begin(m_directory.GetStringRef(), m_style); - auto dir_end = llvm::sys::path::end(m_directory.GetStringRef()); + auto dir_begin = llvm::sys::path::begin(m_directory, m_style); + auto dir_end = llvm::sys::path::end(m_directory); for (auto iter = dir_begin; iter != dir_end; ++iter) { if (*iter == "/" || *iter == ".") @@ -483,8 +485,8 @@ std::vector<llvm::StringRef> FileSpec::GetComponents() const { components.push_back(*iter); } - if (!m_filename.IsEmpty() && m_filename != "/" && m_filename != ".") - components.push_back(m_filename.GetStringRef()); + if (!m_filename.empty() && m_filename != "/" && m_filename != ".") + components.push_back(m_filename); return components; } diff --git a/lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp b/lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp index 32833920ffc57..9589f31b64c25 100644 --- a/lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp +++ b/lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp @@ -8,6 +8,7 @@ #include "MessageObjects.h" #include "lldb/Utility/Args.h" +#include "lldb/Utility/ConstString.h" #include "lldb/Utility/StringExtractor.h" #include "llvm/ADT/StringExtras.h" #include "gtest/gtest.h" _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
