summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2013-04-17 19:00:52 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2013-04-17 19:00:52 +0000
commit3c626edda24ffa583ba5ecb30cabd4af37bbbd35 (patch)
tree22847ce9e3880f5450eac1610e730f054068dcbd /clang/lib
parent6f03f624df1610ead4cc5eb38159221eaa1f1ba2 (diff)
downloadbcm5719-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.cpp17
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
OpenPOWER on IntegriCloud