Files
clang-p2996/clang/test/CodeGenObjCXX/blocks.mm
Nico Weber 1325384b32 Don't try to do RVO on block variables that refer to an enclosing local.
Fixes PR13314, clang crashing on blocks refering to an enclosing local
when the enclosing function returns void.

llvm-svn: 160089
2012-07-11 22:50:15 +00:00

62 lines
958 B
Plaintext

// RUN: %clang_cc1 -x objective-c++ -fblocks -triple x86_64-apple-darwin -fobjc-runtime=macosx-fragile-10.5 %s -verify -std=c++11 -emit-llvm -o %t
// rdar://8979379
@interface A
@end
@interface B : A
@end
void f(int (^bl)(B* b));
// Test1
void g() {
f(^(A* a) { return 0; });
}
// Test2
void g1() {
int (^bl)(B* b) = ^(A* a) { return 0; };
}
// Test3
@protocol NSObject;
void bar(id(^)(void));
void foo(id <NSObject>(^objectCreationBlock)(void)) {
return bar(objectCreationBlock);
}
// Test4
struct S {
S *(^a)() = ^{
return this;
};
};
S s;
// Test5
struct X {
void f() {
^ {
struct Nested { Nested *ptr = this; };
} ();
};
};
// Regression test for PR13314
class FooClass { };
void fun() {
FooClass foovar;
^() { // expected-warning {{expression result unused}}
return foovar;
};
}
void gun() {
FooClass foovar;
[=]() { // expected-warning {{expression result unused}}
return foovar;
};
}