diff options
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 1 | ||||
-rw-r--r-- | lib/Sema/SemaTemplateVariadic.cpp | 2 | ||||
-rw-r--r-- | test/SemaCXX/warn-unused-parameters.cpp | 10 |
3 files changed, 12 insertions, 1 deletions
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 027ec73d49..149201192f 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -9630,6 +9630,7 @@ static ExprResult captureInLambda(Sema &S, LambdaScopeInfo *LSI, // An entity captured by a lambda-expression is odr-used (3.2) in // the scope containing the lambda-expression. Expr *Ref = new (S.Context) DeclRefExpr(Var, DeclRefType, VK_LValue, Loc); + Var->setReferenced(true); Var->setUsed(true); // When the field has array type, create index variables for each diff --git a/lib/Sema/SemaTemplateVariadic.cpp b/lib/Sema/SemaTemplateVariadic.cpp index 15a308575a..3a547ddf68 100644 --- a/lib/Sema/SemaTemplateVariadic.cpp +++ b/lib/Sema/SemaTemplateVariadic.cpp @@ -779,6 +779,8 @@ ExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, return ExprError(); } + MarkAnyDeclReferenced(OpLoc, ParameterPack); + return new (Context) SizeOfPackExpr(Context.getSizeType(), OpLoc, ParameterPack, NameLoc, RParenLoc); } diff --git a/test/SemaCXX/warn-unused-parameters.cpp b/test/SemaCXX/warn-unused-parameters.cpp index 75d8dcc549..00ce1a98c6 100644 --- a/test/SemaCXX/warn-unused-parameters.cpp +++ b/test/SemaCXX/warn-unused-parameters.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -Wunused-parameter -verify %s +// RUN: %clang_cc1 -fsyntax-only -Wunused-parameter -verify -std=c++11 %s template<typename T> struct X { T f0(T x); @@ -24,3 +24,11 @@ void test_X(X<int> &x, int i) { x.f4(i); x.f5(i); } + +// Make sure both parameters aren't considered unused. +template <typename... T> +static int test_pack(T... t, T... s) +{ + auto l = [&t...]() { return sizeof...(s); }; + return l(); +} |