From 5f101b95c6fc1c38895440011e3bbae638590f48 Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Tue, 22 Dec 2009 02:46:13 +0000 Subject: [PATCH] Switch default arguments over to InitializationSequence. llvm-svn: 91883 --- clang/lib/Sema/SemaDeclCXX.cpp | 6 +++++- clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p5.cpp | 2 +- clang/test/SemaCXX/default1.cpp | 2 +- clang/test/SemaTemplate/default-expr-arguments.cpp | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 13b65e3000b3..dfb353281054 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 8fb35c8c91c2..7ee052c5f9cb 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 eab54f47b97b..790208aa1d05 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 df3cc96ba217..8518d7b70c2c 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 { -- GitLab