mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-21 19:36:59 +00:00
In option typo correction, consider -foo=VALUE flags as two distinct parts. The
comments claimed it did this, but the LHS value was actually an unused variable. The new system considers only the '-foo' part when comparing it for typos against flags that have values, but still look at the whole string for flags that don't. That way, we'll still correct '-inst=combine' to '-instcombine'. llvm-svn: 130685
This commit is contained in:
parent
c16a030741
commit
9b28874ca6
@ -186,12 +186,14 @@ static Option *LookupOption(StringRef &Arg, StringRef &Value,
|
||||
/// have already been stripped.
|
||||
static Option *LookupNearestOption(StringRef Arg,
|
||||
const StringMap<Option*> &OptionsMap,
|
||||
const char *&NearestString) {
|
||||
std::string &NearestString) {
|
||||
// Reject all dashes.
|
||||
if (Arg.empty()) return 0;
|
||||
|
||||
// Split on any equal sign.
|
||||
StringRef LHS = Arg.split('=').first;
|
||||
std::pair<StringRef, StringRef> SplitArg = Arg.split('=');
|
||||
StringRef &LHS = SplitArg.first; // LHS == Arg when no '=' is present.
|
||||
StringRef &RHS = SplitArg.second;
|
||||
|
||||
// Find the closest match.
|
||||
Option *Best = 0;
|
||||
@ -204,14 +206,19 @@ static Option *LookupNearestOption(StringRef Arg,
|
||||
if (O->ArgStr[0])
|
||||
OptionNames.push_back(O->ArgStr);
|
||||
|
||||
bool PermitValue = O->getValueExpectedFlag() != cl::ValueDisallowed;
|
||||
StringRef Flag = PermitValue ? LHS : Arg;
|
||||
for (size_t i = 0, e = OptionNames.size(); i != e; ++i) {
|
||||
StringRef Name = OptionNames[i];
|
||||
unsigned Distance = StringRef(Name).edit_distance(
|
||||
Arg, /*AllowReplacements=*/true, /*MaxEditDistance=*/BestDistance);
|
||||
Flag, /*AllowReplacements=*/true, /*MaxEditDistance=*/BestDistance);
|
||||
if (!Best || Distance < BestDistance) {
|
||||
Best = O;
|
||||
NearestString = OptionNames[i];
|
||||
BestDistance = Distance;
|
||||
if (RHS.empty() || !PermitValue)
|
||||
NearestString = OptionNames[i];
|
||||
else
|
||||
NearestString = std::string(OptionNames[i]) + "=" + RHS.str();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -611,7 +618,7 @@ void cl::ParseCommandLineOptions(int argc, char **argv,
|
||||
for (int i = 1; i < argc; ++i) {
|
||||
Option *Handler = 0;
|
||||
Option *NearestHandler = 0;
|
||||
const char *NearestHandlerString = 0;
|
||||
std::string NearestHandlerString;
|
||||
StringRef Value;
|
||||
StringRef ArgName = "";
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user