// 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); } }