summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/captured-statements.cpp
diff options
context:
space:
mode:
authorTareq A. Siraj <tareq.a.sriaj@intel.com>2013-04-16 19:37:38 +0000
committerTareq A. Siraj <tareq.a.sriaj@intel.com>2013-04-16 19:37:38 +0000
commit6dfa25a19f3f28fcdc4a4c0130bf4a6fcdce0cd1 (patch)
treee4355c0d4969b0173e9b0a10d4ed67d60a2f6994 /clang/test/SemaCXX/captured-statements.cpp
parent93383381d7fc1c80b3dd8711164ad858a95718ff (diff)
downloadbcm5719-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.cpp52
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
+ }
+};
OpenPOWER on IntegriCloud