|
12 | 12 | #include "llvm/ADT/SmallString.h"
|
13 | 13 | #include "llvm/Support/Debug.h"
|
14 | 14 | #include "llvm/Support/Errc.h"
|
| 15 | +#include "llvm/Support/ErrorOr.h" |
15 | 16 | #include "llvm/Support/FileSystem.h"
|
16 | 17 | #include "llvm/Support/MemoryBufferRef.h"
|
17 | 18 | #include "llvm/Support/Path.h"
|
@@ -298,12 +299,11 @@ ConfigOptionsProvider::getRawOptions(llvm::StringRef FileName) {
|
298 | 299 | if (ConfigOptions.InheritParentConfig.value_or(false)) {
|
299 | 300 | LLVM_DEBUG(llvm::dbgs()
|
300 | 301 | << "Getting options for file " << FileName << "...\n");
|
301 |
| - assert(FS && "FS must be set."); |
302 | 302 |
|
303 |
| - llvm::SmallString<128> AbsoluteFilePath(FileName); |
304 |
| - |
305 |
| - if (!FS->makeAbsolute(AbsoluteFilePath)) { |
306 |
| - addRawFileOptions(AbsoluteFilePath, RawOptions); |
| 303 | + llvm::ErrorOr<llvm::SmallString<128>> AbsoluteFilePath = |
| 304 | + getNormalizedAbsolutePath(FileName); |
| 305 | + if (AbsoluteFilePath) { |
| 306 | + addRawFileOptions(AbsoluteFilePath->str(), RawOptions); |
307 | 307 | }
|
308 | 308 | }
|
309 | 309 | RawOptions.emplace_back(ConfigOptions,
|
@@ -334,6 +334,17 @@ FileOptionsBaseProvider::FileOptionsBaseProvider(
|
334 | 334 | OverrideOptions(std::move(OverrideOptions)),
|
335 | 335 | ConfigHandlers(std::move(ConfigHandlers)) {}
|
336 | 336 |
|
| 337 | +llvm::ErrorOr<llvm::SmallString<128>> |
| 338 | +FileOptionsBaseProvider::getNormalizedAbsolutePath(llvm::StringRef Path) { |
| 339 | + assert(FS && "FS must be set."); |
| 340 | + llvm::SmallString<128> NormalizedAbsolutePath = {Path}; |
| 341 | + std::error_code Err = FS->makeAbsolute(NormalizedAbsolutePath); |
| 342 | + if (Err) |
| 343 | + return Err; |
| 344 | + llvm::sys::path::remove_dots(NormalizedAbsolutePath, /*remove_dot_dot=*/true); |
| 345 | + return NormalizedAbsolutePath; |
| 346 | +} |
| 347 | + |
337 | 348 | void FileOptionsBaseProvider::addRawFileOptions(
|
338 | 349 | llvm::StringRef AbsolutePath, std::vector<OptionsSource> &CurOptions) {
|
339 | 350 | auto CurSize = CurOptions.size();
|
@@ -397,16 +408,15 @@ std::vector<OptionsSource>
|
397 | 408 | FileOptionsProvider::getRawOptions(StringRef FileName) {
|
398 | 409 | LLVM_DEBUG(llvm::dbgs() << "Getting options for file " << FileName
|
399 | 410 | << "...\n");
|
400 |
| - assert(FS && "FS must be set."); |
401 |
| - |
402 |
| - llvm::SmallString<128> AbsoluteFilePath(FileName); |
403 | 411 |
|
404 |
| - if (FS->makeAbsolute(AbsoluteFilePath)) |
| 412 | + llvm::ErrorOr<llvm::SmallString<128>> AbsoluteFilePath = |
| 413 | + getNormalizedAbsolutePath(FileName); |
| 414 | + if (!AbsoluteFilePath) |
405 | 415 | return {};
|
406 | 416 |
|
407 | 417 | std::vector<OptionsSource> RawOptions =
|
408 |
| - DefaultOptionsProvider::getRawOptions(AbsoluteFilePath.str()); |
409 |
| - addRawFileOptions(AbsoluteFilePath, RawOptions); |
| 418 | + DefaultOptionsProvider::getRawOptions(AbsoluteFilePath->str()); |
| 419 | + addRawFileOptions(AbsoluteFilePath->str(), RawOptions); |
410 | 420 | OptionsSource CommandLineOptions(OverrideOptions,
|
411 | 421 | OptionsSourceTypeCheckCommandLineOption);
|
412 | 422 |
|
|
0 commit comments