diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 13b65e3000b3ae8240932ea546b7702c44c7202f..dfb353281054b3672195d124a762b1815e1a4cfa 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -128,8 +128,12 @@ Sema::SetParamDefaultArgument(ParmVarDecl *Param, ExprArg DefaultArg, InitializedEntity Entity = InitializedEntity::InitializeParameter(Param); InitializationKind Kind = InitializationKind::CreateCopy(Param->getLocation(), EqualLoc); - if (CheckInitializerTypes(Arg, ParamType, Entity, Kind)) + InitializationSequence InitSeq(*this, Entity, Kind, &Arg, 1); + OwningExprResult Result = InitSeq.Perform(*this, Entity, Kind, + MultiExprArg(*this, (void**)&Arg, 1)); + if (Result.isInvalid()) return true; + Arg = Result.takeAs(); Arg = MaybeCreateCXXExprWithTemporaries(Arg); diff --git a/clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p5.cpp b/clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p5.cpp index 8fb35c8c91c20351c8e9d7b4e21a8618f4cd186d..7ee052c5f9cb71f840d0269ceb12fdedd761d860 100644 --- a/clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p5.cpp +++ b/clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p5.cpp @@ -2,7 +2,7 @@ float global_f; -void f0(int *ip = &global_f); // expected-error{{incompatible}} +void f0(int *ip = &global_f); // expected-error{{cannot initialize}} // Example from C++03 standard int a = 1; diff --git a/clang/test/SemaCXX/default1.cpp b/clang/test/SemaCXX/default1.cpp index eab54f47b97b2ac6efbbde213f8154de87e2b29a..790208aa1d050a93eb8dd8e3700465190d7e67f2 100644 --- a/clang/test/SemaCXX/default1.cpp +++ b/clang/test/SemaCXX/default1.cpp @@ -14,7 +14,7 @@ void h(int i, int j = 2, int k = 3, int n);// expected-error {{missing default argument on parameter 'n'}} struct S { } s; -void i(int = s) { } // expected-error {{incompatible type}} +void i(int = s) { } // expected-error {{no viable conversion}} struct X { X(int); diff --git a/clang/test/SemaTemplate/default-expr-arguments.cpp b/clang/test/SemaTemplate/default-expr-arguments.cpp index df3cc96ba2173fd7244abc1028fc923e4d7388d6..8518d7b70c2c4165f3f31e0637e7a271fd30dd29 100644 --- a/clang/test/SemaTemplate/default-expr-arguments.cpp +++ b/clang/test/SemaTemplate/default-expr-arguments.cpp @@ -100,7 +100,7 @@ void test_x2(X2 x2i, X2 x2n) { // PR5283 namespace PR5283 { template struct A { - A(T = 1); // expected-error 3 {{incompatible type initializing 'int', expected 'int *'}} + A(T = 1); // expected-error 3 {{cannot initialize a parameter of type 'int *' with an rvalue of type 'int'}} }; struct B : A {