brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · af6d6ac Raw
147 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -std=c++11 -emit-llvm -o - -UDESUGAR %s | FileCheck %s2// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -std=c++11 -emit-llvm -o - -DDESUGAR %s | FileCheck %s3// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -std=c++11 -emit-llvm -o - -UDESUGAR -DTEMPLATE %s | FileCheck %s4// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -std=c++11 -emit-llvm -o - -DDESUGAR -DTEMPLATE %s | FileCheck %s5// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -std=c++11 -emit-llvm -o - -UDESUGAR -DTEMPLATE -DDEPENDENT %s | FileCheck %s6// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -std=c++11 -emit-llvm -o - -DDESUGAR -DTEMPLATE -DDEPENDENT %s | FileCheck %s7 8struct A {9  A();10  A(const A &);11  ~A();12};13 14struct B {15  B();16  B(const B &);17  ~B();18};19 20struct C {21  C(const B &);22  C(const C &);23  ~C();24};25 26struct E;27struct D {28  D(const C &);29  D(const D &);30  ~D();31};32E begin(D);33E end(D);34 35struct F;36struct G;37struct H;38struct E {39  E(const E &);40  ~E();41  F operator*();42  G operator++();43  H operator!=(const E &o);44};45 46struct I;47struct F {48  F(const F &);49  ~F();50  operator I();51};52 53struct G {54  G(const G &);55  ~G();56  operator bool();57};58 59struct H {60  H(const H &);61  ~H();62  operator bool();63};64 65struct I {66  I(const I &);67  ~I();68};69 70void body(const I &);71 72#ifdef TEMPLATE73#ifdef DEPENDENT74template<typename D>75#else76template<typename>77#endif78#endif79void for_temps() {80  A a;81#ifdef DESUGAR82  {83    auto && __range = D(B());84    for (auto __begin = begin(__range), __end = end(__range);85         __begin != __end; ++__begin) {86      I i = *__begin;87      body(i);88    }89  }90#else91  for (I i : D(B())) {92    body(i);93  }94#endif95}96 97#ifdef TEMPLATE98template void for_temps<D>();99#endif100 101// CHECK: define {{.*}}for_temps102// CHECK: call void @_ZN1AC1Ev(103// CHECK: call void @_ZN1BC1Ev(104// CHECK: call void @_ZN1CC1ERK1B(105// CHECK: call void @_ZN1DC1ERK1C(106// CHECK: call void @_ZN1CD1Ev(107// CHECK: call void @_ZN1BD1Ev(108// CHECK: call void @_ZN1DC1ERKS_(109// CHECK: call void @_Z5begin1D(110// CHECK: call void @_ZN1DD1Ev(111// CHECK: call void @_ZN1DC1ERKS_(112// CHECK: call void @_Z3end1D(113// CHECK: call void @_ZN1DD1Ev(114// CHECK: br label %[[COND:.*]]115 116// CHECK: [[COND]]:117// CHECK: call void @_ZN1EneERKS_(118// CHECK: %[[CMP:.*]] = call noundef zeroext i1 @_ZN1HcvbEv(119// CHECK: call void @_ZN1HD1Ev(120// CHECK: br i1 %[[CMP]], label %[[BODY:.*]], label %[[CLEANUP:.*]]121 122// CHECK: [[CLEANUP]]:123// CHECK: call void @_ZN1ED1Ev(124// CHECK: call void @_ZN1ED1Ev(125// In for-range:126// call void @_ZN1DD1Ev(127// CHECK: br label %[[END:.*]]128 129// CHECK: [[BODY]]:130// CHECK: call void @_ZN1EdeEv(131// CHECK: call void @_ZN1Fcv1IEv(132// CHECK: call void @_ZN1FD1Ev(133// CHECK: call void @_Z4bodyRK1I(134// CHECK: call void @_ZN1ID1Ev(135// CHECK: br label %[[INC:.*]]136 137// CHECK: [[INC]]:138// CHECK: call void @_ZN1EppEv(139// CHECK: call void @_ZN1GD1Ev(140// CHECK: br label %[[COND]]141 142// CHECK: [[END]]:143// In desugared version:144// call void @_ZN1DD1Ev(145// CHECK: call void @_ZN1AD1Ev(146// CHECK: ret void147