forked from OSchip/llvm-project
If a function with a default argument is redefined and the new function also has a defualt argument then add a fixit hint that removes the default argument. Fixes PR5444.
llvm-svn: 86659
This commit is contained in:
parent
f5e98fcff4
commit
0b8ea554e5
|
@ -264,9 +264,18 @@ bool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old) {
|
|||
ParmVarDecl *NewParam = New->getParamDecl(p);
|
||||
|
||||
if (OldParam->hasDefaultArg() && NewParam->hasDefaultArg()) {
|
||||
// FIXME: If the parameter doesn't have an identifier then the location
|
||||
// points to the '=' which means that the fixit hint won't remove any
|
||||
// extra spaces between the type and the '='.
|
||||
SourceLocation Begin = NewParam->getLocation();
|
||||
if (IdentifierInfo *II = NewParam->getIdentifier())
|
||||
Begin = Begin.getFileLocWithOffset(II->getLength());
|
||||
|
||||
Diag(NewParam->getLocation(),
|
||||
diag::err_param_default_argument_redefinition)
|
||||
<< NewParam->getDefaultArgRange();
|
||||
<< NewParam->getDefaultArgRange()
|
||||
<< CodeModificationHint::CreateRemoval(SourceRange(Begin,
|
||||
NewParam->getLocEnd()));
|
||||
|
||||
// Look for the function declaration where the default argument was
|
||||
// actually written, which may be a declaration prior to Old.
|
||||
|
|
|
@ -27,3 +27,12 @@ public:
|
|||
struct CT<0> { }; // expected-error{{'template<>'}}
|
||||
|
||||
template<> class CT<1> { }; // expected-error{{tag type}}
|
||||
|
||||
// PR5444
|
||||
namespace PR5444 {
|
||||
void foo(int x, int y = 0);
|
||||
void foo(int x, int y = 0) { }
|
||||
|
||||
void foo(int = 0);
|
||||
void foo(int = 0) { }
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue