72 lines
1.3 KiB
Plaintext
72 lines
1.3 KiB
Plaintext
|
// RUN: %clang_cc1 -emit-llvm-only -std=c++11 -fblocks -o - -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 %s
|
||
|
// rdar://9362021
|
||
|
|
||
|
@class DYFuture;
|
||
|
@interface NSCache
|
||
|
- (void)setObject:(id)obj forKey:(id)key;
|
||
|
@end
|
||
|
|
||
|
template <typename T>
|
||
|
class ResourceManager
|
||
|
{
|
||
|
public:
|
||
|
~ResourceManager();
|
||
|
DYFuture* XXX();
|
||
|
NSCache* _spDeviceCache;
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
DYFuture* ResourceManager<T>::XXX()
|
||
|
{
|
||
|
^ {
|
||
|
[_spDeviceCache setObject:0 forKey:0];
|
||
|
}();
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
struct AnalyzerBaseObjectTypes { };
|
||
|
|
||
|
void FUNC()
|
||
|
{
|
||
|
ResourceManager<AnalyzerBaseObjectTypes> *rm;
|
||
|
^(void) { rm->XXX(); }();
|
||
|
}
|
||
|
|
||
|
namespace PR9982 {
|
||
|
template<typename T> struct Curry;
|
||
|
|
||
|
template<typename R, typename Arg0, typename Arg1, typename Arg2>
|
||
|
struct Curry<R (^)(Arg0, Arg1, Arg2)>
|
||
|
{
|
||
|
typedef R (^FType)(Arg0, Arg1, Arg2);
|
||
|
|
||
|
Curry(FType _f) : f(_f) {}
|
||
|
~Curry() {;}
|
||
|
|
||
|
R (^(^operator()(Arg0 a))(Arg1))(Arg2)
|
||
|
{
|
||
|
auto block = ^(Arg1 b) {
|
||
|
auto inner_block = ^(Arg2 c) {
|
||
|
return f(a, b, c);
|
||
|
};
|
||
|
return inner_block;
|
||
|
};
|
||
|
return block;
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
FType f;
|
||
|
};
|
||
|
|
||
|
auto add = ^(int a, int b, int c)
|
||
|
{
|
||
|
return a + b + c;
|
||
|
};
|
||
|
|
||
|
void curry() {
|
||
|
Curry<__decltype(add)> c = Curry<__decltype(add)>(add);
|
||
|
auto t = c(1)(10)(100);
|
||
|
}
|
||
|
}
|