]> git.proxmox.com Git - rustc.git/blob - src/llvm/tools/clang/test/CodeGenCXX/instantiate-blocks.cpp
Imported Upstream version 0.6
[rustc.git] / src / llvm / tools / clang / test / CodeGenCXX / instantiate-blocks.cpp
1 // RUN: %clang_cc1 -fblocks -emit-llvm -o - %s
2 // rdar : // 6182276
3
4 template <typename T> T foo(T t)
5 {
6 void (^block)(int);
7 return 1;
8 }
9
10 int test1(void)
11 {
12 int i = 1;
13 int b = 2;
14 i = foo(b);
15 return 0;
16 }
17
18 template <typename T, typename T1> void foo(T t, T1 r)
19 {
20 T block_arg;
21 __block T1 byref_block_arg;
22
23 T1 (^block)(char, T, T1, double) =
24 ^ T1 (char ch, T arg, T1 arg2, double d1) { byref_block_arg = arg2;
25 return byref_block_arg + block_arg + arg; };
26
27 void (^block2)() = ^{};
28 }
29
30 void test2(void)
31 {
32 foo(100, 'a');
33 }
34
35 namespace rdar6182276 {
36 extern "C" {
37 int printf(const char *, ...);
38 }
39
40 template <typename T> T foo(T t)
41 {
42 void (^testing)(int) = ^(int bar) { printf("bar is %d\n", bar); };
43 printf("bar is\n");
44 return 1;
45 }
46
47 template <typename T> void gorf(T t)
48 {
49 foo(t);
50 }
51
52
53 void test(void)
54 {
55 gorf(2);
56 }
57 }
58
59