From 410c5acf27167e482d5cdb83adeda3ea4714426d Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Mon, 30 Apr 2018 12:59:14 +0000 Subject: [PATCH] Fixup r331049 (FileSpec auto-normalization) A typo in the patch (using syntax instead of m_syntax) resulted in the normalization not working properly for windows filespecs when the syntax was passed as host-native. This did not affect the unit tests, as all of those pass an explicity syntax, but failed gloriously when running the full test suite. I also fix an expectation in an lldb-mi test, which was now failing because it was expecting a path to be echoed verbatim, but we were now normalizing it. As a drive-by, this also fixes the default-in-fully-covered-switch warning and removes an unused argument from the NeedsNormalization function. llvm-svn: 331172 --- .../tools/lldb-mi/startup_options/TestMiStartupOptions.py | 2 +- lldb/source/Utility/FileSpec.cpp | 14 ++++---------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-mi/startup_options/TestMiStartupOptions.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-mi/startup_options/TestMiStartupOptions.py index 6766e80..7c225ab 100644 --- a/lldb/packages/Python/lldbsuite/test/tools/lldb-mi/startup_options/TestMiStartupOptions.py +++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-mi/startup_options/TestMiStartupOptions.py @@ -117,7 +117,7 @@ class MiStartupOptionsTestCase(lldbmi_testcase.MiTestCaseBase): """Test that 'lldb-mi --interpreter %s' fails on executable file which is specified via unknown path.""" # Prepare path to executable - path = "unknown_dir/%s" % self.myexe + path = "unknown_dir" + self.myexe self.spawnLldbMi(args="%s" % path) diff --git a/lldb/source/Utility/FileSpec.cpp b/lldb/source/Utility/FileSpec.cpp index cf94e63..0a10fca 100644 --- a/lldb/source/Utility/FileSpec.cpp +++ b/lldb/source/Utility/FileSpec.cpp @@ -69,7 +69,6 @@ LLVMPathSyntax(FileSpec::PathSyntax lldb_syntax) { return llvm::sys::path::Style::posix; case FileSpec::ePathSyntaxWindows: return llvm::sys::path::Style::windows; - default: case FileSpec::ePathSyntaxHostNative: return llvm::sys::path::Style::native; }; @@ -236,14 +235,10 @@ inline char safeCharAtIndex(const llvm::StringRef &path, size_t i) { /// @param[in] path /// A full, partial, or relative path to a file. /// -/// @param[in] syntax -/// The syntax enumeration for the path in \a path. -/// /// @return /// Returns \b true if the path needs to be normalized. //------------------------------------------------------------------ -bool needsNormalization(const llvm::StringRef &path, - FileSpec::PathSyntax syntax) { +bool needsNormalization(const llvm::StringRef &path) { if (path.empty()) return false; // We strip off leading "." values so these paths need to be normalized @@ -338,12 +333,11 @@ void FileSpec::SetFile(llvm::StringRef pathname, bool resolve, } // Normalize the path by removing ".", ".." and other redundant components. - if (needsNormalization(llvm::StringRef(resolved.data(), resolved.size()), - syntax)) - llvm::sys::path::remove_dots(resolved, true, LLVMPathSyntax(syntax)); + if (needsNormalization(resolved)) + llvm::sys::path::remove_dots(resolved, true, LLVMPathSyntax(m_syntax)); // Normalize back slashes to forward slashes - if (syntax == FileSpec::ePathSyntaxWindows) + if (m_syntax == FileSpec::ePathSyntaxWindows) std::replace(resolved.begin(), resolved.end(), '\\', '/'); llvm::StringRef resolve_path_ref(resolved.c_str()); -- 2.7.4