diff options
-rw-r--r-- | lib/Sema/SemaExprCXX.cpp | 8 | ||||
-rw-r--r-- | test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp | 7 |
2 files changed, 14 insertions, 1 deletions
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index c7daa80761..7e97b2919b 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -4886,9 +4886,15 @@ void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, // C++11 [expr.prim.lambda]p5: // This function call operator is declared const (9.3.1) if and only if // the lambda-expression’s parameter-declaration-clause is not followed - // by mutable. It is neither virtual nor declared volatile. + // by mutable. It is neither virtual nor declared volatile. [...] if (!FTI.hasMutableQualifier()) FTI.TypeQuals |= DeclSpec::TQ_const; + + // C++11 [expr.prim.lambda]p5: + // [...] Default arguments (8.3.6) shall not be specified in the + // parameter-declaration-clause of a lambda-declarator. + CheckExtraCXXDefaultArguments(ParamInfo); + MethodTyInfo = GetTypeForDeclarator(ParamInfo, CurScope); // FIXME: Can these asserts actually fail? assert(MethodTyInfo && "no type from lambda-declarator"); diff --git a/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp b/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp new file mode 100644 index 0000000000..a6fca9b2c4 --- /dev/null +++ b/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp @@ -0,0 +1,7 @@ +// RUN: %clang_cc1 -std=c++11 %s -verify + +int test_default_args() { + [](int i = 5, // expected-error{{default arguments can only be specified for parameters in a function declaration}} \ + // expected-error{{lambda expressions are not supported yet}} + int j = 17) {}; // expected-error{{default arguments can only be specified for parameters in a function declaration}} +} |