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