1*67e74705SXin Li// RUN: %clang_cc1 -emit-llvm-only -std=c++11 -fblocks -o - -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 %s 2*67e74705SXin Li// rdar://9362021 3*67e74705SXin Li 4*67e74705SXin Li@class DYFuture; 5*67e74705SXin Li@interface NSCache 6*67e74705SXin Li- (void)setObject:(id)obj forKey:(id)key; 7*67e74705SXin Li@end 8*67e74705SXin Li 9*67e74705SXin Litemplate <typename T> 10*67e74705SXin Liclass ResourceManager 11*67e74705SXin Li{ 12*67e74705SXin Lipublic: 13*67e74705SXin Li ~ResourceManager(); 14*67e74705SXin Li DYFuture* XXX(); 15*67e74705SXin Li NSCache* _spDeviceCache; 16*67e74705SXin Li}; 17*67e74705SXin Li 18*67e74705SXin Litemplate <typename T> 19*67e74705SXin LiDYFuture* ResourceManager<T>::XXX() 20*67e74705SXin Li{ 21*67e74705SXin Li ^ { 22*67e74705SXin Li [_spDeviceCache setObject:0 forKey:0]; 23*67e74705SXin Li }(); 24*67e74705SXin Li 25*67e74705SXin Li return 0; 26*67e74705SXin Li} 27*67e74705SXin Li 28*67e74705SXin Listruct AnalyzerBaseObjectTypes { }; 29*67e74705SXin Li 30*67e74705SXin Livoid FUNC() 31*67e74705SXin Li{ 32*67e74705SXin Li ResourceManager<AnalyzerBaseObjectTypes> *rm; 33*67e74705SXin Li ^(void) { rm->XXX(); }(); 34*67e74705SXin Li} 35*67e74705SXin Li 36*67e74705SXin Linamespace PR9982 { 37*67e74705SXin Li template<typename T> struct Curry; 38*67e74705SXin Li 39*67e74705SXin Li template<typename R, typename Arg0, typename Arg1, typename Arg2> 40*67e74705SXin Li struct Curry<R (^)(Arg0, Arg1, Arg2)> 41*67e74705SXin Li { 42*67e74705SXin Li typedef R (^FType)(Arg0, Arg1, Arg2); 43*67e74705SXin Li 44*67e74705SXin Li Curry(FType _f) : f(_f) {} 45*67e74705SXin Li ~Curry() {;} 46*67e74705SXin Li 47*67e74705SXin Li R (^(^operator()(Arg0 a))(Arg1))(Arg2) 48*67e74705SXin Li { 49*67e74705SXin Li auto block = ^(Arg1 b) { 50*67e74705SXin Li auto inner_block = ^(Arg2 c) { 51*67e74705SXin Li return f(a, b, c); 52*67e74705SXin Li }; 53*67e74705SXin Li return inner_block; 54*67e74705SXin Li }; 55*67e74705SXin Li return block; 56*67e74705SXin Li } 57*67e74705SXin Li 58*67e74705SXin Li private: 59*67e74705SXin Li FType f; 60*67e74705SXin Li }; 61*67e74705SXin Li 62*67e74705SXin Li auto add = ^(int a, int b, int c) 63*67e74705SXin Li { 64*67e74705SXin Li return a + b + c; 65*67e74705SXin Li }; 66*67e74705SXin Li 67*67e74705SXin Li void curry() { 68*67e74705SXin Li Curry<__decltype(add)> c = Curry<__decltype(add)>(add); 69*67e74705SXin Li auto t = c(1)(10)(100); 70*67e74705SXin Li } 71*67e74705SXin Li} 72