forked from OSchip/llvm-project
Make sure that we instantiate default function arguments for an
overloaded operator(). llvm-svn: 86581
This commit is contained in:
parent
d2f9c044c0
commit
1bc688dc60
|
@ -5420,7 +5420,14 @@ Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Object,
|
||||||
QualType ProtoArgType = Proto->getArgType(i);
|
QualType ProtoArgType = Proto->getArgType(i);
|
||||||
IsError |= PerformCopyInitialization(Arg, ProtoArgType, "passing");
|
IsError |= PerformCopyInitialization(Arg, ProtoArgType, "passing");
|
||||||
} else {
|
} else {
|
||||||
Arg = CXXDefaultArgExpr::Create(Context, Method->getParamDecl(i));
|
OwningExprResult DefArg
|
||||||
|
= BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
|
||||||
|
if (DefArg.isInvalid()) {
|
||||||
|
IsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Arg = DefArg.takeAs<Expr>();
|
||||||
}
|
}
|
||||||
|
|
||||||
TheCall->setArg(i + 1, Arg);
|
TheCall->setArg(i + 1, Arg);
|
||||||
|
|
|
@ -65,8 +65,8 @@ void test_x0(X0<int> xi) {
|
||||||
xi.f(17);
|
xi.f(17);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct NotDefaultConstructible { // expected-note{{candidate}}
|
struct NotDefaultConstructible { // expected-note 2{{candidate}}
|
||||||
NotDefaultConstructible(int); // expected-note{{candidate}}
|
NotDefaultConstructible(int); // expected-note 2{{candidate}}
|
||||||
};
|
};
|
||||||
|
|
||||||
void test_x0_not_default_constructible(X0<NotDefaultConstructible> xn) {
|
void test_x0_not_default_constructible(X0<NotDefaultConstructible> xn) {
|
||||||
|
@ -85,6 +85,18 @@ void test_X1() {
|
||||||
X1<int> x1;
|
X1<int> x1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
struct X2 {
|
||||||
|
void operator()(T = T()); // expected-error{{no matching}}
|
||||||
|
};
|
||||||
|
|
||||||
|
void test_x2(X2<int> x2i, X2<NotDefaultConstructible> x2n) {
|
||||||
|
x2i();
|
||||||
|
x2i(17);
|
||||||
|
x2n(NotDefaultConstructible(17));
|
||||||
|
x2n(); // expected-note{{in instantiation of default function argument}}
|
||||||
|
}
|
||||||
|
|
||||||
// PR5283
|
// PR5283
|
||||||
namespace PR5283 {
|
namespace PR5283 {
|
||||||
template<typename T> struct A {
|
template<typename T> struct A {
|
||||||
|
@ -131,3 +143,4 @@ namespace pr5301 {
|
||||||
h(0);
|
h(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue