summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/reference-in-block-args.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2010-06-02 21:35:17 +0000
committerFariborz Jahanian <fjahanian@apple.com>2010-06-02 21:35:17 +0000
commitd1b378e08db08635b59952e9853eb662d7adf5f6 (patch)
tree3b39802d9e6d9472dde96676b1d765e111569202 /clang/test/CodeGenCXX/reference-in-block-args.cpp
parent6a7f9f5c8fde7e1489d14a914ab2a47e4cd1bb3a (diff)
downloadbcm5719-llvm-d1b378e08db08635b59952e9853eb662d7adf5f6.tar.gz
bcm5719-llvm-d1b378e08db08635b59952e9853eb662d7adf5f6.zip
Block C++ code gen. Adds support for block reference argument
types. Executable test will be added to LLVM test suite. (radar 8041962). llvm-svn: 105347
Diffstat (limited to 'clang/test/CodeGenCXX/reference-in-block-args.cpp')
-rw-r--r--clang/test/CodeGenCXX/reference-in-block-args.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/reference-in-block-args.cpp b/clang/test/CodeGenCXX/reference-in-block-args.cpp
new file mode 100644
index 00000000000..1ff1ae2dc85
--- /dev/null
+++ b/clang/test/CodeGenCXX/reference-in-block-args.cpp
@@ -0,0 +1,29 @@
+// RUN: %clang_cc1 -fblocks %s -emit-llvm -o %t
+// rdar: // 8041962
+
+extern "C" int printf(const char*, ...);
+
+struct ST {
+ int filler;
+ int referrer;
+};
+
+void OUTER_BLOCK(void (^fixer)(ST& ref)) {
+ ST ref = {2, 100};
+ fixer(ref);
+}
+
+void INNER_BLOCK(int (^largeDo) ()) {
+ printf("%d\n", largeDo());
+}
+
+void scan() {
+ OUTER_BLOCK(^(ST &ref) {
+ INNER_BLOCK(^() { return ref.referrer + ref.filler; });
+ });
+
+}
+
+int main() {
+ scan();
+}
OpenPOWER on IntegriCloud