diff --git a/clang-tools-extra/clang-doc/Mapper.cpp b/clang-tools-extra/clang-doc/Mapper.cpp index 5264417748a12..bb8b7952980ac 100644 --- a/clang-tools-extra/clang-doc/Mapper.cpp +++ b/clang-tools-extra/clang-doc/Mapper.cpp @@ -103,7 +103,7 @@ llvm::SmallString<128> MapASTVisitor::getFile(const NamedDecl *D, .getPresumedLoc(D->getBeginLoc()) .getFilename()); IsFileInRootDir = false; - if (RootDir.empty() || !File.startswith(RootDir)) + if (RootDir.empty() || !File.starts_with(RootDir)) return File; IsFileInRootDir = true; llvm::SmallString<128> Prefix(RootDir); diff --git a/clang-tools-extra/modularize/ModuleAssistant.cpp b/clang-tools-extra/modularize/ModuleAssistant.cpp index 0d4c09987eb1c..5c11ffdb8589d 100644 --- a/clang-tools-extra/modularize/ModuleAssistant.cpp +++ b/clang-tools-extra/modularize/ModuleAssistant.cpp @@ -175,7 +175,7 @@ static bool addModuleDescription(Module *RootModule, llvm::SmallString<256> NativePath, NativePrefix; llvm::sys::path::native(HeaderFilePath, NativePath); llvm::sys::path::native(HeaderPrefix, NativePrefix); - if (NativePath.startswith(NativePrefix)) + if (NativePath.starts_with(NativePrefix)) FilePath = std::string(NativePath.substr(NativePrefix.size() + 1)); else FilePath = std::string(HeaderFilePath); diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp index 50ab6ea59be9d..c59a66e103a6e 100644 --- a/clang/lib/AST/MicrosoftMangle.cpp +++ b/clang/lib/AST/MicrosoftMangle.cpp @@ -3809,14 +3809,14 @@ void MicrosoftMangleContextImpl::mangleCXXRTTICompleteObjectLocator( llvm::raw_svector_ostream Stream(VFTableMangling); mangleCXXVFTable(Derived, BasePath, Stream); - if (VFTableMangling.startswith("??@")) { - assert(VFTableMangling.endswith("@")); + if (VFTableMangling.starts_with("??@")) { + assert(VFTableMangling.ends_with("@")); Out << VFTableMangling << "??_R4@"; return; } - assert(VFTableMangling.startswith("??_7") || - VFTableMangling.startswith("??_S")); + assert(VFTableMangling.starts_with("??_7") || + VFTableMangling.starts_with("??_S")); Out << "??_R4" << VFTableMangling.str().drop_front(4); } diff --git a/clang/lib/Basic/Module.cpp b/clang/lib/Basic/Module.cpp index e4ac1abf12a7f..7523e509a4710 100644 --- a/clang/lib/Basic/Module.cpp +++ b/clang/lib/Basic/Module.cpp @@ -89,7 +89,7 @@ static bool isPlatformEnvironment(const TargetInfo &Target, StringRef Feature) { // where both are valid examples of the same platform+environment but in the // variant (2) the simulator is hardcoded as part of the platform name. Both // forms above should match for "iossimulator" requirement. - if (Target.getTriple().isOSDarwin() && PlatformEnv.endswith("simulator")) + if (Target.getTriple().isOSDarwin() && PlatformEnv.ends_with("simulator")) return PlatformEnv == Feature || CmpPlatformEnv(PlatformEnv, Feature); return PlatformEnv == Feature; diff --git a/clang/lib/CrossTU/CrossTranslationUnit.cpp b/clang/lib/CrossTU/CrossTranslationUnit.cpp index 540c22d078654..94c10e50d7d06 100644 --- a/clang/lib/CrossTU/CrossTranslationUnit.cpp +++ b/clang/lib/CrossTU/CrossTranslationUnit.cpp @@ -551,7 +551,7 @@ CrossTranslationUnitContext::ASTLoader::load(StringRef Identifier) { // Normalize by removing relative path components. llvm::sys::path::remove_dots(Path, /*remove_dot_dot*/ true, PathStyle); - if (Path.endswith(".ast")) + if (Path.ends_with(".ast")) return loadFromDump(Path); else return loadFromSource(Path); diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index e241706b9082e..f392f6794f857 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1522,7 +1522,7 @@ bool Driver::getCrashDiagnosticFile(StringRef ReproCrashFilename, // (or /Library/Logs/DiagnosticReports for root) and has the filename pattern // clang-__.crash. path::home_directory(CrashDiagDir); - if (CrashDiagDir.startswith("/var/root")) + if (CrashDiagDir.starts_with("/var/root")) CrashDiagDir = "/"; path::append(CrashDiagDir, "Library/Logs/DiagnosticReports"); int PID = diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index f09bc27d7d2c0..692b3a3f285d7 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -1281,7 +1281,7 @@ void MachO::AddLinkRuntimeLib(const ArgList &Args, ArgStringList &CmdArgs, // rpaths. This is currently true from this place, but we need to be // careful if this function is ever called before user's rpaths are emitted. if (Opts & RLO_AddRPath) { - assert(DarwinLibName.endswith(".dylib") && "must be a dynamic library"); + assert(DarwinLibName.ends_with(".dylib") && "must be a dynamic library"); // Add @executable_path to rpath to support having the dylib copied with // the executable. diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp index 268b72c966ab8..d35c282543c56 100644 --- a/clang/lib/Lex/ModuleMap.cpp +++ b/clang/lib/Lex/ModuleMap.cpp @@ -1864,7 +1864,7 @@ void ModuleMapParser::diagnosePrivateModules(SourceLocation ExplicitLoc, continue; SmallString<128> FullName(ActiveModule->getFullModuleName()); - if (!FullName.startswith(M->Name) && !FullName.endswith("Private")) + if (!FullName.starts_with(M->Name) && !FullName.ends_with("Private")) continue; SmallString<128> FixedPrivModDecl; SmallString<128> Canonical(M->Name); diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index 6169144ef1c2d..143968b4ab044 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/lib/Sema/SemaCodeComplete.cpp @@ -10112,7 +10112,7 @@ void Sema::CodeCompleteIncludedFile(llvm::StringRef Dir, bool Angled) { const StringRef &Dirname = llvm::sys::path::filename(Dir); const bool isQt = Dirname.startswith("Qt") || Dirname == "ActiveQt"; const bool ExtensionlessHeaders = - IsSystem || isQt || Dir.endswith(".framework/Headers"); + IsSystem || isQt || Dir.ends_with(".framework/Headers"); std::error_code EC; unsigned Count = 0; for (auto It = FS.dir_begin(Dir, EC); diff --git a/lld/COFF/PDB.cpp b/lld/COFF/PDB.cpp index f77ff0d4eab80..8b81a71e8fb6f 100644 --- a/lld/COFF/PDB.cpp +++ b/lld/COFF/PDB.cpp @@ -268,7 +268,7 @@ void PDBLinker::pdbMakeAbsolute(SmallVectorImpl &fileName) { // decide that it's a unix path if we're fairly certain. Specifically, if // it starts with a forward slash. SmallString<128> absoluteFileName = ctx.config.pdbSourcePath; - sys::path::Style guessedStyle = absoluteFileName.startswith("/") + sys::path::Style guessedStyle = absoluteFileName.starts_with("/") ? sys::path::Style::posix : sys::path::Style::windows; sys::path::append(absoluteFileName, guessedStyle, fileName); diff --git a/lld/MachO/InputFiles.cpp b/lld/MachO/InputFiles.cpp index 31ed24149e78d..7d0cdce9de7dc 100644 --- a/lld/MachO/InputFiles.cpp +++ b/lld/MachO/InputFiles.cpp @@ -1535,7 +1535,7 @@ std::string ObjFile::sourceFile() const { StringRef sep = sys::path::get_separator(); // We don't use `path::append` here because we want an empty `dir` to result // in an absolute path. `append` would give us a relative path for that case. - if (!dir.endswith(sep)) + if (!dir.ends_with(sep)) dir += sep; return (dir + unitName).str(); } diff --git a/lldb/source/Commands/CommandCompletions.cpp b/lldb/source/Commands/CommandCompletions.cpp index 4d7e3d7f2497b..0b69ce098195b 100644 --- a/lldb/source/Commands/CommandCompletions.cpp +++ b/lldb/source/Commands/CommandCompletions.cpp @@ -333,7 +333,7 @@ static void DiskFilesOrDirectories(const llvm::Twine &partial_name, llvm::StringRef SearchDir; llvm::StringRef PartialItem; - if (CompletionBuffer.startswith("~")) { + if (CompletionBuffer.starts_with("~")) { llvm::StringRef Buffer = CompletionBuffer; size_t FirstSep = Buffer.find_if([](char c) { return path::is_separator(c); }); diff --git a/llvm/include/llvm/ADT/SmallString.h b/llvm/include/llvm/ADT/SmallString.h index 0052c86fb37b8..02fa28fc856d7 100644 --- a/llvm/include/llvm/ADT/SmallString.h +++ b/llvm/include/llvm/ADT/SmallString.h @@ -120,15 +120,11 @@ class SmallString : public SmallVector { /// @name String Predicates /// @{ - /// startswith - Check if this string starts with the given \p Prefix. - bool startswith(StringRef Prefix) const { - return str().startswith(Prefix); - } + /// starts_with - Check if this string starts with the given \p Prefix. + bool starts_with(StringRef Prefix) const { return str().starts_with(Prefix); } - /// endswith - Check if this string ends with the given \p Suffix. - bool endswith(StringRef Suffix) const { - return str().endswith(Suffix); - } + /// ends_with - Check if this string ends with the given \p Suffix. + bool ends_with(StringRef Suffix) const { return str().ends_with(Suffix); } /// @} /// @name String Searching diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index 16cc83b8881f8..9827bd3ff4f1b 100644 --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -1048,7 +1048,7 @@ MCSection *TargetLoweringObjectFileELF::getSectionForMachineBasicBlock( } else { Name += FunctionSectionName; if (TM.getUniqueBasicBlockSectionNames()) { - if (!Name.endswith(".")) + if (!Name.ends_with(".")) Name += "."; Name += MBB.getSymbol()->getName(); } else { diff --git a/llvm/lib/Support/Windows/Path.inc b/llvm/lib/Support/Windows/Path.inc index e4563fd6ed9ef..168a63bb2d969 100644 --- a/llvm/lib/Support/Windows/Path.inc +++ b/llvm/lib/Support/Windows/Path.inc @@ -76,7 +76,7 @@ std::error_code widenPath(const Twine &Path8, SmallVectorImpl &Path16, // If the path is a long path, mangled into forward slashes, normalize // back to backslashes here. - if (Path8Str.startswith("//?/")) + if (Path8Str.starts_with("//?/")) llvm::sys::path::native(Path8Str, path::Style::windows_backslash); if (std::error_code EC = UTF8ToUTF16(Path8Str, Path16)) @@ -96,7 +96,7 @@ std::error_code widenPath(const Twine &Path8, SmallVectorImpl &Path16, const char *const LongPathPrefix = "\\\\?\\"; if ((Path16.size() + CurPathLen) < MaxPathLen || - Path8Str.startswith(LongPathPrefix)) + Path8Str.starts_with(LongPathPrefix)) return std::error_code(); if (!IsAbsolute) { diff --git a/llvm/tools/dsymutil/DebugMap.cpp b/llvm/tools/dsymutil/DebugMap.cpp index dcdecdfe8210b..8724b70422f32 100644 --- a/llvm/tools/dsymutil/DebugMap.cpp +++ b/llvm/tools/dsymutil/DebugMap.cpp @@ -287,7 +287,7 @@ MappingTraits::YamlDMO::denormalize(IO &IO) { } uint8_t Type = MachO::N_OSO; - if (Path.endswith(".dylib")) { + if (Path.ends_with(".dylib")) { // FIXME: find a more resilient way Type = MachO::N_LIB; } diff --git a/llvm/tools/llvm-cov/CodeCoverage.cpp b/llvm/tools/llvm-cov/CodeCoverage.cpp index b5d763d8643cd..c1e3e2c4d1e29 100644 --- a/llvm/tools/llvm-cov/CodeCoverage.cpp +++ b/llvm/tools/llvm-cov/CodeCoverage.cpp @@ -502,7 +502,7 @@ void CodeCoverageTool::remapPathNames(const CoverageMapping &Coverage) { SmallString<128> NativeFilename; sys::path::native(Filename, NativeFilename); sys::path::remove_dots(NativeFilename, true); - if (NativeFilename.startswith(RemapFrom)) { + if (NativeFilename.starts_with(RemapFrom)) { RemappedFilenames[Filename] = RemapTo + NativeFilename.substr(RemapFrom.size()).str(); } diff --git a/llvm/tools/llvm-cov/CoverageReport.cpp b/llvm/tools/llvm-cov/CoverageReport.cpp index 060733b2d5d6d..eae2653b85c80 100644 --- a/llvm/tools/llvm-cov/CoverageReport.cpp +++ b/llvm/tools/llvm-cov/CoverageReport.cpp @@ -211,7 +211,7 @@ void CoverageReport::render(const FileCoverageSummary &File, sys::path::native(FileName); // remove_dots will remove trailing slash, so we need to check before it. - auto IsDir = FileName.endswith(sys::path::get_separator()); + auto IsDir = FileName.ends_with(sys::path::get_separator()); sys::path::remove_dots(FileName, /*remove_dot_dot=*/true); if (IsDir) FileName += sys::path::get_separator(); diff --git a/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp b/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp index 79a0494815c2b..d0a2e44be2521 100644 --- a/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp +++ b/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp @@ -639,7 +639,7 @@ struct CoveragePrinterHTMLDirectory::Reporter : public DirectoryCoverageReport { sys::path::native(LinkTextStr); // remove_dots will remove trailing slash, so we need to check before it. - auto IsDir = LinkTextStr.endswith(sys::path::get_separator()); + auto IsDir = LinkTextStr.ends_with(sys::path::get_separator()); sys::path::remove_dots(LinkTextStr, /*remove_dot_dot=*/true); SmallString<128> LinkTargetStr(LinkTextStr); diff --git a/llvm/tools/llvm-ml/llvm-ml.cpp b/llvm/tools/llvm-ml/llvm-ml.cpp index 4d6bd90d13ad5..1c713304e4ea1 100644 --- a/llvm/tools/llvm-ml/llvm-ml.cpp +++ b/llvm/tools/llvm-ml/llvm-ml.cpp @@ -83,7 +83,7 @@ static Triple GetTriple(StringRef ProgName, opt::InputArgList &Args) { StringRef DefaultBitness = "32"; SmallString<255> Program = ProgName; sys::path::replace_extension(Program, ""); - if (Program.endswith("ml64")) + if (Program.ends_with("ml64")) DefaultBitness = "64"; StringRef TripleName = diff --git a/llvm/unittests/Support/Path.cpp b/llvm/unittests/Support/Path.cpp index 35a01aa276679..a7b7e6a0f5044 100644 --- a/llvm/unittests/Support/Path.cpp +++ b/llvm/unittests/Support/Path.cpp @@ -882,7 +882,7 @@ TEST_F(FileSystemTest, TempFiles) { int FD2; SmallString<64> TempPath2; ASSERT_NO_ERROR(fs::createTemporaryFile("prefix", "temp", FD2, TempPath2)); - ASSERT_TRUE(TempPath2.endswith(".temp")); + ASSERT_TRUE(TempPath2.ends_with(".temp")); ASSERT_NE(TempPath.str(), TempPath2.str()); fs::file_status A, B; @@ -908,7 +908,7 @@ TEST_F(FileSystemTest, TempFiles) { SmallString<64> TempPath3; ASSERT_NO_ERROR(fs::createTemporaryFile("prefix", "", TempPath3)); - ASSERT_FALSE(TempPath3.endswith(".")); + ASSERT_FALSE(TempPath3.ends_with(".")); FileRemover Cleanup3(TempPath3); // Create a hard link to Temp1. @@ -1515,13 +1515,13 @@ TEST(Support, NormalizePath) { const char *Path7a = "~/aaa"; SmallString<64> Path7(Path7a); path::native(Path7, path::Style::windows_backslash); - EXPECT_TRUE(Path7.endswith("\\aaa")); - EXPECT_TRUE(Path7.startswith(PathHome)); + EXPECT_TRUE(Path7.ends_with("\\aaa")); + EXPECT_TRUE(Path7.starts_with(PathHome)); EXPECT_EQ(Path7.size(), PathHome.size() + strlen(Path7a + 1)); Path7 = Path7a; path::native(Path7, path::Style::windows_slash); - EXPECT_TRUE(Path7.endswith("/aaa")); - EXPECT_TRUE(Path7.startswith(PathHome)); + EXPECT_TRUE(Path7.ends_with("/aaa")); + EXPECT_TRUE(Path7.starts_with(PathHome)); EXPECT_EQ(Path7.size(), PathHome.size() + strlen(Path7a + 1)); const char *Path8a = "~";