diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-04-17 19:00:52 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-04-17 19:00:52 +0000 |
commit | 3c626edda24ffa583ba5ecb30cabd4af37bbbd35 (patch) | |
tree | 22847ce9e3880f5450eac1610e730f054068dcbd /clang/lib | |
parent | 6f03f624df1610ead4cc5eb38159221eaa1f1ba2 (diff) | |
download | bcm5719-llvm-3c626edda24ffa583ba5ecb30cabd4af37bbbd35.tar.gz bcm5719-llvm-3c626edda24ffa583ba5ecb30cabd4af37bbbd35.zip |
PR15755: don't drop parameter packs when dropping parameters with default
arguments in the formation of a candidate set of inheriting constructors.
llvm-svn: 179708
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index fd3489fd537..94a507449b9 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -7827,13 +7827,16 @@ private: // constructor templates that results from omitting any ellipsis parameter // specification and successively omitting parameters with a default // argument from the end of the parameter-type-list - for (unsigned Params = std::max(minParamsToInherit(Ctor), - Ctor->getMinRequiredArguments()), - MaxParams = Ctor->getNumParams(); - Params <= MaxParams; ++Params) - declareCtor(UsingLoc, Ctor, - SemaRef.Context.getFunctionType( - Ctor->getResultType(), ArgTypes.slice(0, Params), EPI)); + unsigned MinParams = minParamsToInherit(Ctor); + unsigned Params = Ctor->getNumParams(); + if (Params >= MinParams) { + do + declareCtor(UsingLoc, Ctor, + SemaRef.Context.getFunctionType( + Ctor->getResultType(), ArgTypes.slice(0, Params), EPI)); + while (Params > MinParams && + Ctor->getParamDecl(--Params)->hasDefaultArg()); + } } /// Find the using-declaration which specified that we should inherit the |