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} 341256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian 351256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahaniannamespace rdar6182276 { 361256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanianextern "C" { 371256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanianint printf(const char *, ...); 381256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian} 391256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian 401256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahaniantemplate <typename T> T foo(T t) 411256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian{ 421256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian void (^testing)(int) = ^(int bar) { printf("bar is %d\n", bar); }; 431256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian printf("bar is\n"); 441256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian return 1; 451256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian} 461256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian 471256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahaniantemplate <typename T> void gorf(T t) 481256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian{ 491256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian foo(t); 501256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian} 511256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian 521256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian 531256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanianvoid test(void) 541256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian{ 551256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian gorf(2); 561256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian} 571256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian} 581256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian 591256f453f8810ed2df1e33f17378872dd1cb1a0bFariborz Jahanian 60