60 lines
891 B
C++
60 lines
891 B
C++
|
// 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);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|