brintos

brintos / llvm-project-archived public Read only

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