summaryrefslogtreecommitdiffstats
path: root/test/SemaCXX/blocks.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/SemaCXX/blocks.cpp')
-rw-r--r--test/SemaCXX/blocks.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/SemaCXX/blocks.cpp b/test/SemaCXX/blocks.cpp
index 9429543..baa79e7 100644
--- a/test/SemaCXX/blocks.cpp
+++ b/test/SemaCXX/blocks.cpp
@@ -9,3 +9,35 @@ void tovoid_test(int (^f)(int, int)) {
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);
+ }
+}
OpenPOWER on IntegriCloud