diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-02-10 08:36:38 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-02-10 08:36:38 +0000 |
commit | 12695101ec453c4b000f9be5ab56e81a37218d4a (patch) | |
tree | 77474d9dbac25970c6b0e4790f4af6d734ae7e77 /clang/test/CXX/expr/expr.prim/expr.prim.lambda | |
parent | 9c702207e54359117173909556f149c19d27ecc6 (diff) | |
download | bcm5719-llvm-12695101ec453c4b000f9be5ab56e81a37218d4a.tar.gz bcm5719-llvm-12695101ec453c4b000f9be5ab56e81a37218d4a.zip |
Implement the conversion to a function pointer for lambda expressions,
per C++ [expr.prim.lambda]p6.
llvm-svn: 150236
Diffstat (limited to 'clang/test/CXX/expr/expr.prim/expr.prim.lambda')
-rw-r--r-- | clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp | 6 | ||||
-rw-r--r-- | clang/test/CXX/expr/expr.prim/expr.prim.lambda/p6.cpp | 22 |
2 files changed, 25 insertions, 3 deletions
diff --git a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp index 9df0f64ad31..74003431c68 100644 --- a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp +++ b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp @@ -15,13 +15,13 @@ void test_quals() { // 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. - auto l = [](){}; // expected-note{{method is not marked volatile}} + auto l = [=](){}; // expected-note{{method is not marked volatile}} const decltype(l) lc = l; l(); lc(); - auto ml = []() mutable{}; // expected-note{{method is not marked const}} \ - // expected-note{{method is not marked volatile}} + auto ml = [=]() mutable{}; // expected-note{{method is not marked const}} \ + // expected-note{{method is not marked volatile}} const decltype(ml) mlc = ml; ml(); mlc(); // expected-error{{no matching function for call to object of type}} diff --git a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p6.cpp b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p6.cpp new file mode 100644 index 00000000000..8b43cefa92c --- /dev/null +++ b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p6.cpp @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify + +void test_conversion() { + int (*fp1)(int) = [](int x) { return x + 1; }; + void (*fp2)(int) = [](int x) { }; + + const auto lambda = [](int x) { }; + void (*fp3)(int) = lambda; + + volatile const auto lambda2 = [](int x) { }; // expected-note{{but method is not marked volatile}} + void (*fp4)(int) = lambda2; // expected-error{{no viable conversion}} +} + +void test_no_conversion() { + int (*fp1)(int) = [=](int x) { return x + 1; }; // expected-error{{no viable conversion}} + void (*fp2)(int) = [&](int x) { }; // expected-error{{no viable conversion}} +} + +void test_wonky() { + const auto l = [](int x) mutable -> int { return + 1; }; + l(17); // okay: uses conversion function +} |