// RUN: %clang_cc1 -fblocks -emit-llvm -o - %s | |
// rdar : // 6182276 | |
template <typename T> T foo(T t) | |
{ | |
void (^block)(int); | |
return 1; | |
} | |
int test1(void) | |
{ | |
int i = 1; | |
int b = 2; | |
i = foo(b); | |
return 0; | |
} | |
template <typename T, typename T1> void foo(T t, T1 r) | |
{ | |
T block_arg; | |
__block T1 byref_block_arg; | |
T1 (^block)(char, T, T1, double) = | |
^ T1 (char ch, T arg, T1 arg2, double d1) { byref_block_arg = arg2; | |
return byref_block_arg + block_arg + arg; }; | |
void (^block2)() = ^{}; | |
} | |
void test2(void) | |
{ | |
foo(100, 'a'); | |
} | |
namespace rdar6182276 { | |
extern "C" { | |
int printf(const char *, ...); | |
} | |
template <typename T> T foo(T t) | |
{ | |
void (^testing)(int) = ^(int bar) { printf("bar is %d\n", bar); }; | |
printf("bar is\n"); | |
return 1; | |
} | |
template <typename T> void gorf(T t) | |
{ | |
foo(t); | |
} | |
void test(void) | |
{ | |
gorf(2); | |
} | |
} | |