| // RUN: %clang_cc1 -fblocks -emit-llvm -o - %s | |
| 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); | |
| } | |
| } | |