Block C++ code gen. Adds support for block reference argument
types. Executable test will be added to LLVM test suite.
(radar 8041962).


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105347 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/CodeGenCXX/reference-in-block-args.cpp b/test/CodeGenCXX/reference-in-block-args.cpp
new file mode 100644
index 0000000..1ff1ae2
--- /dev/null
+++ b/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();
+}