blob: 42c63186d067257d68d3a03015310a38aa4addde [file] [log] [blame]
// rdar://8594790
#if defined(__BLOCKS__) && defined(__clang__)
#include <Block.h>
extern "C" void abort();
static int count=0;
class A {
public:
int x;
A(const A &o) { ++count; x = o.x;
if (this == &o)
abort();
}
A &operator =(const A &o) { x = o.x; return *this; }
A() : x(100) { ++count; }
~A();
void hello() const {
if (x != 100)
abort();
}
};
A::~A() {
--count;
if (x != 100)
abort();
x = 0;
}
#endif
int
main()
{
#if defined(__BLOCKS__) && defined(__clang__)
if (!count) {
__block A a;
A ca;
void (^b)(void) = Block_copy(^{ a.hello(); ca.hello(); });
b();
Block_release(b);
}
if (count)
abort();
#endif
return 0;
}