diff --git a/llvm/lib/TargetParser/RISCVISAInfo.cpp b/llvm/lib/TargetParser/RISCVISAInfo.cpp index c763ee73b4b0b..e8172ebb25972 100644 --- a/llvm/lib/TargetParser/RISCVISAInfo.cpp +++ b/llvm/lib/TargetParser/RISCVISAInfo.cpp @@ -460,19 +460,18 @@ RISCVISAInfo::parseNormalizedArchString(StringRef Arch) { // Split Prefix into the extension name and the major version number // (the trailing digits of Prefix). - int TrailingDigits = 0; - StringRef ExtName = Prefix; - while (!ExtName.empty()) { - if (!isDigit(ExtName.back())) + size_t VersionStart = Prefix.size(); + while (VersionStart != 0) { + if (!isDigit(Prefix[VersionStart - 1])) break; - ExtName = ExtName.drop_back(1); - TrailingDigits++; + --VersionStart; } - if (!TrailingDigits) + if (VersionStart == Prefix.size()) return createStringError(errc::invalid_argument, "extension lacks version in expected format"); - StringRef MajorVersionStr = Prefix.take_back(TrailingDigits); + StringRef ExtName = Prefix.slice(0, VersionStart); + StringRef MajorVersionStr = Prefix.slice(VersionStart, StringRef::npos); if (MajorVersionStr.getAsInteger(10, MajorVersion)) return createStringError(errc::invalid_argument, "failed to parse major version number");