forked from OSchip/llvm-project
Fix a crasher than manifests when typo correction suggests a function template.
llvm-svn: 187467
This commit is contained in:
parent
7f8042c8f3
commit
2ac682a671
|
@ -3932,7 +3932,7 @@ Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn,
|
||||||
<< Fn->getSourceRange() << CorrectedQuotedStr
|
<< Fn->getSourceRange() << CorrectedQuotedStr
|
||||||
<< FixItHint::CreateReplacement(TC.getCorrectionRange(),
|
<< FixItHint::CreateReplacement(TC.getCorrectionRange(),
|
||||||
CorrectedStr);
|
CorrectedStr);
|
||||||
Diag(TC.getCorrectionDeclAs<FunctionDecl>()->getLocStart(),
|
Diag(TC.getCorrectionDecl()->getLocStart(),
|
||||||
diag::note_previous_decl) << CorrectedQuotedStr;
|
diag::note_previous_decl) << CorrectedQuotedStr;
|
||||||
} else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())
|
} else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())
|
||||||
Diag(RParenLoc, MinArgs == NumArgsInProto && !Proto->isVariadic()
|
Diag(RParenLoc, MinArgs == NumArgsInProto && !Proto->isVariadic()
|
||||||
|
@ -3978,7 +3978,7 @@ Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn,
|
||||||
<< Fn->getSourceRange() << CorrectedQuotedStr
|
<< Fn->getSourceRange() << CorrectedQuotedStr
|
||||||
<< FixItHint::CreateReplacement(TC.getCorrectionRange(),
|
<< FixItHint::CreateReplacement(TC.getCorrectionRange(),
|
||||||
CorrectedStr);
|
CorrectedStr);
|
||||||
Diag(TC.getCorrectionDeclAs<FunctionDecl>()->getLocStart(),
|
Diag(TC.getCorrectionDecl()->getLocStart(),
|
||||||
diag::note_previous_decl) << CorrectedQuotedStr;
|
diag::note_previous_decl) << CorrectedQuotedStr;
|
||||||
} else if (NumArgsInProto == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())
|
} else if (NumArgsInProto == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())
|
||||||
Diag(Args[NumArgsInProto]->getLocStart(),
|
Diag(Args[NumArgsInProto]->getLocStart(),
|
||||||
|
|
|
@ -14,3 +14,22 @@ void zif::nab(int) {
|
||||||
nab(); // expected-error{{too few arguments to function call, expected 1, have 0; did you mean '::PR12287::nab'?}}
|
nab(); // expected-error{{too few arguments to function call, expected 1, have 0; did you mean '::PR12287::nab'?}}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace TemplateFunction {
|
||||||
|
template <class T> // expected-note {{'::TemplateFunction::A' declared here}}
|
||||||
|
void A(T) { }
|
||||||
|
|
||||||
|
template <class T> // expected-note {{'::TemplateFunction::B' declared here}}
|
||||||
|
void B(T) { }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
public:
|
||||||
|
void A(int, int) {}
|
||||||
|
void B() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
void test(Foo F, int num) {
|
||||||
|
F.A(num); // expected-error {{too few arguments to function call, expected 2, have 1; did you mean '::TemplateFunction::A'?}}
|
||||||
|
F.B(num); // expected-error {{too many arguments to function call, expected 0, have 1; did you mean '::TemplateFunction::B'?}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue