From c70fe353ea52a1dbf13d0b7266e445b3fa1fda66 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Wed, 8 Feb 2012 20:56:50 +0000 Subject: When computing the type of a local variable reference within a lambda, only add 'const' for variables captured by copy in potentially evaluated expressions of non-mutable lambdas. (The "by copy" part was missing). llvm-svn: 150088 --- .../CXX/expr/expr.prim/expr.prim.lambda/p7.cpp | 37 ++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'clang/test/CXX/expr/expr.prim/expr.prim.lambda/p7.cpp') diff --git a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p7.cpp b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p7.cpp index 239b6d4f469..0696f603b68 100644 --- a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p7.cpp +++ b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p7.cpp @@ -6,7 +6,40 @@ void analysis_based_warnings() { // expected-error{{lambda expressions are not supported yet}} } -// FIXME: Also check translation of captured vars to data members, -// most of which isn't in the AST. +// Check that we get the right types of captured variables (the semantic-analysis part of +int &check_const_int(int&); +float &check_const_int(const int&); + +void test_capture_constness(int i, const int ic) { + [i,ic] ()->void { // expected-error{{lambda expressions are not supported yet}} + float &fr1 = check_const_int(i); + float &fr2 = check_const_int(ic); + }; + + [=] ()->void { // expected-error{{lambda expressions are not supported yet}} + float &fr1 = check_const_int(i); + float &fr2 = check_const_int(ic); + }; + + [i,ic] () mutable ->void { // expected-error{{lambda expressions are not supported yet}} + int &ir = check_const_int(i); + float &fr = check_const_int(ic); + }; + + [=] () mutable ->void { // expected-error{{lambda expressions are not supported yet}} + int &ir = check_const_int(i); + float &fr = check_const_int(ic); + }; + + [&i,&ic] ()->void { // expected-error{{lambda expressions are not supported yet}} + int &ir = check_const_int(i); + float &fr = check_const_int(ic); + }; + + [&] ()->void { // expected-error{{lambda expressions are not supported yet}} + int &ir = check_const_int(i); + float &fr = check_const_int(ic); + }; +} -- cgit v1.2.3