[Lldb-commits] [lldb] af0e709 - Reapply "[lldb] Remove ConstString from FileSpec" (#211927) (#214599)
via lldb-commits
lldb-commits at lists.llvm.org
Fri Aug 7 11:00:19 PDT 2026
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"
More information about the lldb-commits
mailing list