diff options
-rw-r--r-- | clang/tools/driver/driver.cpp | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/clang/tools/driver/driver.cpp b/clang/tools/driver/driver.cpp index 3e98b2c6c95..b7f7fbf851c 100644 --- a/clang/tools/driver/driver.cpp +++ b/clang/tools/driver/driver.cpp @@ -243,24 +243,20 @@ static void ParseProgName(SmallVectorImpl<const char *> &ArgVector, StringRef Prefix; for (int Components = 2; Components; --Components) { - bool FoundMatch = false; - size_t i; - - for (i = 0; i < llvm::array_lengthof(suffixes); ++i) { - if (ProgNameRef.endswith(suffixes[i].Suffix)) { - FoundMatch = true; - SmallVectorImpl<const char *>::iterator it = ArgVector.begin(); + auto I = std::find_if(std::begin(suffixes), std::end(suffixes), + [&](const decltype(suffixes[0]) &suffix) { + return ProgNameRef.endswith(suffix.Suffix); + }); + + if (I != std::end(suffixes)) { + if (I->ModeFlag) { + auto it = ArgVector.begin(); if (it != ArgVector.end()) ++it; - if (suffixes[i].ModeFlag) - ArgVector.insert(it, suffixes[i].ModeFlag); - break; + ArgVector.insert(it, I->ModeFlag); } - } - - if (FoundMatch) { StringRef::size_type LastComponent = ProgNameRef.rfind('-', - ProgNameRef.size() - strlen(suffixes[i].Suffix)); + ProgNameRef.size() - strlen(I->Suffix)); if (LastComponent != StringRef::npos) Prefix = ProgNameRef.slice(0, LastComponent); break; @@ -277,13 +273,13 @@ static void ParseProgName(SmallVectorImpl<const char *> &ArgVector, std::string IgnoredError; if (llvm::TargetRegistry::lookupTarget(Prefix, IgnoredError)) { - SmallVectorImpl<const char *>::iterator it = ArgVector.begin(); + auto it = ArgVector.begin(); if (it != ArgVector.end()) ++it; const char* Strings[] = { GetStableCStr(SavedStrings, std::string("-target")), GetStableCStr(SavedStrings, Prefix) }; - ArgVector.insert(it, Strings, Strings + llvm::array_lengthof(Strings)); + ArgVector.insert(it, std::begin(Strings), std::end(Strings)); } } |