instantiate-blocks.cpp revision 6bb9f78d13adc4adb57e32a16fc3380b47608e56
1eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian// RUN: %clang_cc1 -fblocks -emit-llvm -o - %s
2eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian// rdar : // 6182276
3eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian
4eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahaniantemplate <typename T> T foo(T t)
5eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian{
6eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian    void (^block)(int);
7eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian    return 1;
8eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian}
9eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian
10eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanianint test1(void)
11eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian{
12eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian    int i = 1;
13eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian    int b = 2;
14eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian    i = foo(b);
15eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian    return 0;
16eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian}
17eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian
18eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahaniantemplate <typename T, typename T1> void foo(T t, T1 r)
19eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian{
20eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian    T block_arg;
21bc9011559b6fd32cf4755bf62652f2950f193f15Fariborz Jahanian    __block T1 byref_block_arg;
22bc9011559b6fd32cf4755bf62652f2950f193f15Fariborz Jahanian
23bc9011559b6fd32cf4755bf62652f2950f193f15Fariborz Jahanian    T1 (^block)(char, T, T1, double) =
24bc9011559b6fd32cf4755bf62652f2950f193f15Fariborz Jahanian	^ T1 (char ch, T arg, T1 arg2, double d1) { byref_block_arg = arg2;
256bb9f78d13adc4adb57e32a16fc3380b47608e56Fariborz Jahanian           					    return byref_block_arg + block_arg + arg; };
26eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian
27eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian    void (^block2)() = ^{};
28eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian}
29eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian
30eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanianvoid test2(void)
31eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian{
32eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian    foo(100, 'a');
33eea08b18fa4fa0218be75845d1b77e2ccfe7bd3fFariborz Jahanian}
34