Skip to content

Commit 26670e7

Browse files
authored
[lldb] Correctly fix a usage of PATH_MAX, and fix unit tests (llvm#104502)
# Part 1: Correctly fix a usage of `PATH_MAX` TL;DR: Adding a typedef `lldb_private::PathSmallString` which contains a hardcoded initial size (128). # Part 2: Fix unit tests After llvm#104493 fixed the build break for Windows, unit test failure showed up for Windows. The root-cause is that the `FileSpec`'s in the unit tests are not style-specific. The fix is to apply either `WindowsSpec` or `PosixSpec` specifically.
1 parent 4695c16 commit 26670e7

File tree

4 files changed

+87
-64
lines changed

4 files changed

+87
-64
lines changed

lldb/include/lldb/lldb-private-types.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "lldb/lldb-private.h"
1313

1414
#include "llvm/ADT/ArrayRef.h"
15+
#include "llvm/ADT/SmallString.h"
1516

1617
#include <type_traits>
1718

@@ -26,6 +27,8 @@ class Platform;
2627
class ExecutionContext;
2728
class RegisterFlags;
2829

30+
typedef llvm::SmallString<256> PathSmallString;
31+
2932
typedef llvm::sys::DynamicLibrary (*LoadPluginCallbackType)(
3033
const lldb::DebuggerSP &debugger_sp, const FileSpec &spec, Status &error);
3134

lldb/source/Utility/RealpathPrefixes.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88

99
#include "lldb/Utility/RealpathPrefixes.h"
1010

11-
#include "lldb/Host/PosixApi.h"
1211
#include "lldb/Utility/FileSpec.h"
1312
#include "lldb/Utility/FileSpecList.h"
1413
#include "lldb/Utility/LLDBLog.h"
1514
#include "lldb/Utility/Log.h"
15+
#include "lldb/lldb-private-types.h"
1616

1717
using namespace lldb_private;
1818

@@ -54,7 +54,7 @@ RealpathPrefixes::ResolveSymlinks(const FileSpec &file_spec) {
5454
LLDB_LOGF(log, "Realpath'ing support file %s", file_spec_path.c_str());
5555

5656
// One prefix matched. Try to realpath.
57-
llvm::SmallString<PATH_MAX> buff;
57+
PathSmallString buff;
5858
std::error_code ec = m_fs->getRealPath(file_spec_path, buff);
5959
if (ec)
6060
return std::nullopt;

lldb/unittests/Utility/FileSpecListTest.cpp

Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -133,20 +133,21 @@ TEST(SupportFileListTest, RelativePathMatchesWindows) {
133133
TEST(SupportFileListTest, SymlinkedAbsolutePaths) {
134134
// Prepare FS
135135
llvm::IntrusiveRefCntPtr<MockSymlinkFileSystem> fs(new MockSymlinkFileSystem(
136-
FileSpec("/symlink_dir/foo.h"), FileSpec("/real_dir/foo.h")));
136+
PosixSpec("/symlink_dir/foo.h"), PosixSpec("/real_dir/foo.h"),
137+
FileSpec::Style::posix));
137138

138139
// Prepare RealpathPrefixes
139140
FileSpecList file_spec_list;
140-
file_spec_list.EmplaceBack("/symlink_dir");
141+
file_spec_list.Append(PosixSpec("/symlink_dir"));
141142
RealpathPrefixes prefixes(file_spec_list, fs);
142143

143144
// Prepare support file list
144145
SupportFileList support_file_list;
145-
support_file_list.EmplaceBack(FileSpec("/symlink_dir/foo.h"));
146+
support_file_list.Append(PosixSpec("/symlink_dir/foo.h"));
146147

147148
// Test
148149
size_t ret = support_file_list.FindCompatibleIndex(
149-
0, FileSpec("/real_dir/foo.h"), &prefixes);
150+
0, PosixSpec("/real_dir/foo.h"), &prefixes);
150151
EXPECT_EQ(ret, (size_t)0);
151152
}
152153

@@ -157,20 +158,21 @@ TEST(SupportFileListTest, SymlinkedAbsolutePaths) {
157158
TEST(SupportFileListTest, RootDirectory) {
158159
// Prepare FS
159160
llvm::IntrusiveRefCntPtr<MockSymlinkFileSystem> fs(new MockSymlinkFileSystem(
160-
FileSpec("/symlink_dir/foo.h"), FileSpec("/real_dir/foo.h")));
161+
PosixSpec("/symlink_dir/foo.h"), PosixSpec("/real_dir/foo.h"),
162+
FileSpec::Style::posix));
161163

162164
// Prepare RealpathPrefixes
163165
FileSpecList file_spec_list;
164-
file_spec_list.EmplaceBack("/");
166+
file_spec_list.Append(PosixSpec("/"));
165167
RealpathPrefixes prefixes(file_spec_list, fs);
166168

167169
// Prepare support file list
168170
SupportFileList support_file_list;
169-
support_file_list.EmplaceBack(FileSpec("/symlink_dir/foo.h"));
171+
support_file_list.Append(PosixSpec("/symlink_dir/foo.h"));
170172

171173
// Test
172174
size_t ret = support_file_list.FindCompatibleIndex(
173-
0, FileSpec("/real_dir/foo.h"), &prefixes);
175+
0, PosixSpec("/real_dir/foo.h"), &prefixes);
174176
EXPECT_EQ(ret, (size_t)0);
175177
}
176178

@@ -181,20 +183,21 @@ TEST(SupportFileListTest, RootDirectory) {
181183
TEST(SupportFileListTest, SymlinkedRelativePaths) {
182184
// Prepare FS
183185
llvm::IntrusiveRefCntPtr<MockSymlinkFileSystem> fs(new MockSymlinkFileSystem(
184-
FileSpec("symlink_dir/foo.h"), FileSpec("real_dir/foo.h")));
186+
PosixSpec("symlink_dir/foo.h"), PosixSpec("real_dir/foo.h"),
187+
FileSpec::Style::posix));
185188

186189
// Prepare RealpathPrefixes
187190
FileSpecList file_spec_list;
188-
file_spec_list.EmplaceBack("symlink_dir");
191+
file_spec_list.Append(PosixSpec("symlink_dir"));
189192
RealpathPrefixes prefixes(file_spec_list, fs);
190193

191194
// Prepare support file list
192195
SupportFileList support_file_list;
193-
support_file_list.EmplaceBack(FileSpec("symlink_dir/foo.h"));
196+
support_file_list.Append(PosixSpec("symlink_dir/foo.h"));
194197

195198
// Test
196199
size_t ret = support_file_list.FindCompatibleIndex(
197-
0, FileSpec("real_dir/foo.h"), &prefixes);
200+
0, PosixSpec("real_dir/foo.h"), &prefixes);
198201
EXPECT_EQ(ret, (size_t)0);
199202
}
200203

@@ -205,20 +208,21 @@ TEST(SupportFileListTest, SymlinkedRelativePaths) {
205208
TEST(SupportFileListTest, RealpathOnlyMatchFileName) {
206209
// Prepare FS
207210
llvm::IntrusiveRefCntPtr<MockSymlinkFileSystem> fs(new MockSymlinkFileSystem(
208-
FileSpec("symlink_dir/foo.h"), FileSpec("real_dir/foo.h")));
211+
PosixSpec("symlink_dir/foo.h"), PosixSpec("real_dir/foo.h"),
212+
FileSpec::Style::posix));
209213

210214
// Prepare RealpathPrefixes
211215
FileSpecList file_spec_list;
212-
file_spec_list.EmplaceBack("symlink_dir");
216+
file_spec_list.Append(PosixSpec("symlink_dir"));
213217
RealpathPrefixes prefixes(file_spec_list, fs);
214218

215219
// Prepare support file list
216220
SupportFileList support_file_list;
217-
support_file_list.EmplaceBack(FileSpec("symlink_dir/foo.h"));
221+
support_file_list.Append(PosixSpec("symlink_dir/foo.h"));
218222

219223
// Test
220224
size_t ret = support_file_list.FindCompatibleIndex(
221-
0, FileSpec("some_other_dir/foo.h"), &prefixes);
225+
0, PosixSpec("some_other_dir/foo.h"), &prefixes);
222226
EXPECT_EQ(ret, UINT32_MAX);
223227
}
224228

@@ -228,21 +232,22 @@ TEST(SupportFileListTest, RealpathOnlyMatchFileName) {
228232
TEST(SupportFileListTest, DirectoryMatchStringPrefixButNotWholeDirectoryName) {
229233
// Prepare FS
230234
llvm::IntrusiveRefCntPtr<MockSymlinkFileSystem> fs(new MockSymlinkFileSystem(
231-
FileSpec("symlink_dir/foo.h"), FileSpec("real_dir/foo.h")));
235+
PosixSpec("symlink_dir/foo.h"), PosixSpec("real_dir/foo.h"),
236+
FileSpec::Style::posix));
232237

233238
// Prepare RealpathPrefixes
234239
FileSpecList file_spec_list;
235-
file_spec_list.EmplaceBack("symlink"); // This is a string prefix of the
236-
// symlink but not a path prefix.
240+
file_spec_list.Append(PosixSpec("symlink")); // This is a string prefix of the
241+
// symlink but not a path prefix.
237242
RealpathPrefixes prefixes(file_spec_list, fs);
238243

239244
// Prepare support file list
240245
SupportFileList support_file_list;
241-
support_file_list.EmplaceBack(FileSpec("symlink_dir/foo.h"));
246+
support_file_list.Append(PosixSpec("symlink_dir/foo.h"));
242247

243248
// Test
244249
size_t ret = support_file_list.FindCompatibleIndex(
245-
0, FileSpec("real_dir/foo.h"), &prefixes);
250+
0, PosixSpec("real_dir/foo.h"), &prefixes);
246251
EXPECT_EQ(ret, UINT32_MAX);
247252
}
248253

@@ -253,20 +258,21 @@ TEST(SupportFileListTest, DirectoryMatchStringPrefixButNotWholeDirectoryName) {
253258
TEST(SupportFileListTest, PartialBreakpointPath) {
254259
// Prepare FS
255260
llvm::IntrusiveRefCntPtr<MockSymlinkFileSystem> fs(new MockSymlinkFileSystem(
256-
FileSpec("symlink_dir/foo.h"), FileSpec("/real_dir/foo.h")));
261+
PosixSpec("symlink_dir/foo.h"), PosixSpec("/real_dir/foo.h"),
262+
FileSpec::Style::posix));
257263

258264
// Prepare RealpathPrefixes
259265
FileSpecList file_spec_list;
260-
file_spec_list.EmplaceBack("symlink_dir");
266+
file_spec_list.Append(PosixSpec("symlink_dir"));
261267
RealpathPrefixes prefixes(file_spec_list, fs);
262268

263269
// Prepare support file list
264270
SupportFileList support_file_list;
265-
support_file_list.EmplaceBack(FileSpec("symlink_dir/foo.h"));
271+
support_file_list.Append(PosixSpec("symlink_dir/foo.h"));
266272

267273
// Test
268274
size_t ret = support_file_list.FindCompatibleIndex(
269-
0, FileSpec("real_dir/foo.h"), &prefixes);
275+
0, PosixSpec("real_dir/foo.h"), &prefixes);
270276
EXPECT_EQ(ret, (size_t)0);
271277
}
272278

@@ -277,20 +283,21 @@ TEST(SupportFileListTest, PartialBreakpointPath) {
277283
TEST(SupportFileListTest, DifferentBasename) {
278284
// Prepare FS
279285
llvm::IntrusiveRefCntPtr<MockSymlinkFileSystem> fs(new MockSymlinkFileSystem(
280-
FileSpec("/symlink_dir/foo.h"), FileSpec("/real_dir/bar.h")));
286+
PosixSpec("/symlink_dir/foo.h"), PosixSpec("/real_dir/bar.h"),
287+
FileSpec::Style::posix));
281288

282289
// Prepare RealpathPrefixes
283290
FileSpecList file_spec_list;
284-
file_spec_list.EmplaceBack("/symlink_dir");
291+
file_spec_list.Append(PosixSpec("/symlink_dir"));
285292
RealpathPrefixes prefixes(file_spec_list, fs);
286293

287294
// Prepare support file list
288295
SupportFileList support_file_list;
289-
support_file_list.EmplaceBack(FileSpec("/symlink_dir/foo.h"));
296+
support_file_list.Append(PosixSpec("/symlink_dir/foo.h"));
290297

291298
// Test
292299
size_t ret = support_file_list.FindCompatibleIndex(
293-
0, FileSpec("real_dir/bar.h"), &prefixes);
300+
0, PosixSpec("real_dir/bar.h"), &prefixes);
294301
EXPECT_EQ(ret, UINT32_MAX);
295302
}
296303

@@ -300,11 +307,11 @@ TEST(SupportFileListTest, DifferentBasename) {
300307
TEST(SupportFileListTest, NoPrefixes) {
301308
// Prepare support file list
302309
SupportFileList support_file_list;
303-
support_file_list.EmplaceBack(FileSpec("/real_dir/bar.h"));
310+
support_file_list.Append(PosixSpec("/real_dir/bar.h"));
304311

305312
// Test
306313
size_t ret = support_file_list.FindCompatibleIndex(
307-
0, FileSpec("/real_dir/foo.h"), nullptr);
314+
0, PosixSpec("/real_dir/foo.h"), nullptr);
308315
EXPECT_EQ(ret, UINT32_MAX);
309316
}
310317

@@ -314,10 +321,10 @@ TEST(SupportFileListTest, NoPrefixes) {
314321
TEST(SupportFileListTest, SameFile) {
315322
// Prepare support file list
316323
SupportFileList support_file_list;
317-
support_file_list.EmplaceBack(FileSpec("/real_dir/foo.h"));
324+
support_file_list.Append(PosixSpec("/real_dir/foo.h"));
318325

319326
// Test
320327
size_t ret = support_file_list.FindCompatibleIndex(
321-
0, FileSpec("/real_dir/foo.h"), nullptr);
328+
0, PosixSpec("/real_dir/foo.h"), nullptr);
322329
EXPECT_EQ(ret, (size_t)0);
323330
}

0 commit comments

Comments
 (0)