2009-12-16 04:14:24 +08:00
|
|
|
// RUN: %clang_cc1 -fsyntax-only -verify %s -fblocks
|
2012-10-19 20:44:48 +08:00
|
|
|
// expected-no-diagnostics
|
2008-12-02 03:48:06 +08:00
|
|
|
|
|
|
|
void tovoid(void*);
|
|
|
|
|
|
|
|
void tovoid_test(int (^f)(int, int)) {
|
|
|
|
tovoid(f);
|
|
|
|
}
|
2009-05-26 10:03:20 +08:00
|
|
|
|
|
|
|
void reference_lvalue_test(int& (^f)()) {
|
|
|
|
f() = 10;
|
|
|
|
}
|
2010-05-20 09:18:31 +08:00
|
|
|
|
|
|
|
// PR 7165
|
|
|
|
namespace test1 {
|
|
|
|
void g(void (^)());
|
|
|
|
struct Foo {
|
|
|
|
void foo();
|
|
|
|
void test() {
|
|
|
|
(void) ^{ foo(); };
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
namespace test2 {
|
|
|
|
int repeat(int value, int (^block)(int), unsigned n) {
|
|
|
|
while (n--) value = block(value);
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
class Power {
|
|
|
|
int base;
|
|
|
|
|
|
|
|
public:
|
|
|
|
Power(int base) : base(base) {}
|
|
|
|
int calculate(unsigned n) {
|
|
|
|
return repeat(1, ^(int v) { return v * base; }, n);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
int test() {
|
|
|
|
return Power(2).calculate(10);
|
|
|
|
}
|
|
|
|
}
|
2010-09-04 05:36:02 +08:00
|
|
|
|
|
|
|
// rdar: // 8382559
|
|
|
|
namespace radar8382559 {
|
|
|
|
void func(bool& outHasProperty);
|
|
|
|
|
|
|
|
int test3() {
|
|
|
|
__attribute__((__blocks__(byref))) bool hasProperty = false;
|
2010-09-04 07:07:53 +08:00
|
|
|
bool has = true;
|
|
|
|
|
2010-09-04 05:36:02 +08:00
|
|
|
bool (^b)() = ^ {
|
|
|
|
func(hasProperty);
|
|
|
|
if (hasProperty)
|
|
|
|
hasProperty = 0;
|
2010-09-04 07:07:53 +08:00
|
|
|
if (has)
|
|
|
|
hasProperty = 1;
|
2010-09-04 05:36:02 +08:00
|
|
|
return hasProperty;
|
|
|
|
};
|
|
|
|
func(hasProperty);
|
2010-09-04 07:07:53 +08:00
|
|
|
func(has);
|
2010-09-04 05:36:02 +08:00
|
|
|
b();
|
|
|
|
if (hasProperty)
|
|
|
|
hasProperty = 1;
|
2010-09-04 07:07:53 +08:00
|
|
|
if (has)
|
|
|
|
has = 2;
|
2010-09-04 05:36:02 +08:00
|
|
|
return hasProperty = 1;
|
|
|
|
}
|
|
|
|
}
|