diff options
author | Tareq A. Siraj <tareq.a.sriaj@intel.com> | 2013-04-16 19:37:38 +0000 |
---|---|---|
committer | Tareq A. Siraj <tareq.a.sriaj@intel.com> | 2013-04-16 19:37:38 +0000 |
commit | 6dfa25a19f3f28fcdc4a4c0130bf4a6fcdce0cd1 (patch) | |
tree | e4355c0d4969b0173e9b0a10d4ed67d60a2f6994 /clang/test/SemaCXX/captured-statements.cpp | |
parent | 93383381d7fc1c80b3dd8711164ad858a95718ff (diff) | |
download | bcm5719-llvm-6dfa25a19f3f28fcdc4a4c0130bf4a6fcdce0cd1.tar.gz bcm5719-llvm-6dfa25a19f3f28fcdc4a4c0130bf4a6fcdce0cd1.zip |
Sema for Captured Statements
Add CapturedDecl to be the DeclContext for CapturedStmt, and perform semantic
analysis. Currently captures all variables by reference.
TODO: templates
Author: Ben Langmuir <ben.langmuir@intel.com>
Differential Revision: http://llvm-reviews.chandlerc.com/D433
llvm-svn: 179618
Diffstat (limited to 'clang/test/SemaCXX/captured-statements.cpp')
-rw-r--r-- | clang/test/SemaCXX/captured-statements.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/captured-statements.cpp b/clang/test/SemaCXX/captured-statements.cpp new file mode 100644 index 00000000000..15879a1ebc0 --- /dev/null +++ b/clang/test/SemaCXX/captured-statements.cpp @@ -0,0 +1,52 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s -fblocks + +void test_nest_lambda() { + int x; + int y; + [&,y]() { + int z; + #pragma clang __debug captured + { + x = y; // OK + y = z; // expected-error{{cannot assign to a variable captured by copy in a non-mutable lambda}} + z = y; // OK + } + }(); + + int a; + #pragma clang __debug captured + { + int b; + int c; + [&,c]() { + a = b; // OK + b = c; // OK + c = a; // expected-error{{cannot assign to a variable captured by copy in a non-mutable lambda}} + }(); + } +} + +class test_obj_capture { + int a; + void b(); + static void test() { + test_obj_capture c; + #pragma clang __debug captured + { (void)c.a; } // OK + #pragma clang __debug captured + { c.b(); } // OK + } +}; + +class test_this_capture { + int a; + void b(); + void test() { + #pragma clang __debug captured + { (void)this; } // OK + #pragma clang __debug captured + { (void)a; } // OK + #pragma clang __debug captured + { b(); } // OK + } +}; |