|
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