From 222e2a7620e6520ffaf4fc4e69d79c18da31542e Mon Sep 17 00:00:00 2001 From: "Zancanaro; Carlo" Date: Mon, 24 Sep 2012 09:58:17 +1000 Subject: Add the clang library to the repo (with some of my changes, too). --- clang/test/SemaCXX/blocks.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 clang/test/SemaCXX/blocks.cpp (limited to 'clang/test/SemaCXX/blocks.cpp') diff --git a/clang/test/SemaCXX/blocks.cpp b/clang/test/SemaCXX/blocks.cpp new file mode 100644 index 0000000..adbff55 --- /dev/null +++ b/clang/test/SemaCXX/blocks.cpp @@ -0,0 +1,70 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s -fblocks + +void tovoid(void*); + +void tovoid_test(int (^f)(int, int)) { + tovoid(f); +} + +void reference_lvalue_test(int& (^f)()) { + f() = 10; +} + +// 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); + } +} + +// rdar: // 8382559 +namespace radar8382559 { + void func(bool& outHasProperty); + + int test3() { + __attribute__((__blocks__(byref))) bool hasProperty = false; + bool has = true; + + bool (^b)() = ^ { + func(hasProperty); + if (hasProperty) + hasProperty = 0; + if (has) + hasProperty = 1; + return hasProperty; + }; + func(hasProperty); + func(has); + b(); + if (hasProperty) + hasProperty = 1; + if (has) + has = 2; + return hasProperty = 1; + } +} -- cgit v1.2.3