Home | History | Annotate | Download | only in CodeGenCXX
      1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10.0.0 -emit-llvm -o - %s -fexceptions -std=c++11 | FileCheck %s
      2 
      3 // CHECK: @var = internal global
      4 auto var = [](int i) { return i+1; };
      5 
      6 // CHECK: @cvar = global
      7 extern "C" auto cvar = []{};
      8 
      9 int a() { return []{ return 1; }(); }
     10 // CHECK: define i32 @_Z1av
     11 // CHECK: call i32 @"_ZZ1avENK3$_0clEv"
     12 // CHECK: define internal i32 @"_ZZ1avENK3$_0clEv"
     13 // CHECK: ret i32 1
     14 
     15 int b(int x) { return [x]{return x;}(); }
     16 // CHECK: define i32 @_Z1bi
     17 // CHECK: store i32
     18 // CHECK: load i32*
     19 // CHECK: store i32
     20 // CHECK: call i32 @"_ZZ1biENK3$_1clEv"
     21 // CHECK: define internal i32 @"_ZZ1biENK3$_1clEv"
     22 // CHECK: load i32*
     23 // CHECK: ret i32
     24 
     25 int c(int x) { return [&x]{return x;}(); }
     26 // CHECK: define i32 @_Z1ci
     27 // CHECK: store i32
     28 // CHECK: store i32*
     29 // CHECK: call i32 @"_ZZ1ciENK3$_2clEv"
     30 // CHECK: define internal i32 @"_ZZ1ciENK3$_2clEv"
     31 // CHECK: load i32**
     32 // CHECK: load i32*
     33 // CHECK: ret i32
     34 
     35 struct D { D(); D(const D&); int x; };
     36 int d(int x) { D y[10]; [x,y] { return y[x].x; }(); }
     37 
     38 // CHECK: define i32 @_Z1di
     39 // CHECK: call void @_ZN1DC1Ev
     40 // CHECK: icmp ult i64 %{{.*}}, 10
     41 // CHECK: call void @_ZN1DC1ERKS_
     42 // CHECK: call i32 @"_ZZ1diENK3$_3clEv"
     43 // CHECK: define internal i32 @"_ZZ1diENK3$_3clEv"
     44 // CHECK: load i32*
     45 // CHECK: load i32*
     46 // CHECK: ret i32
     47 
     48 struct E { E(); E(const E&); ~E(); int x; };
     49 int e(E a, E b, bool cond) { [a,b,cond](){ return (cond ? a : b).x; }(); }
     50 // CHECK: define i32 @_Z1e1ES_b
     51 // CHECK: call void @_ZN1EC1ERKS_
     52 // CHECK: invoke void @_ZN1EC1ERKS_
     53 // CHECK: invoke i32 @"_ZZ1e1ES_bENK3$_4clEv"
     54 // CHECK: call void @"_ZZ1e1ES_bEN3$_4D1Ev"
     55 // CHECK: call void @"_ZZ1e1ES_bEN3$_4D1Ev"
     56 
     57 // CHECK: define internal i32 @"_ZZ1e1ES_bENK3$_4clEv"
     58 // CHECK: trunc i8
     59 // CHECK: load i32*
     60 // CHECK: ret i32
     61 
     62 void f() {
     63   // CHECK: define void @_Z1fv()
     64   // CHECK: @"_ZZ1fvENK3$_5cvPFiiiEEv"
     65   // CHECK-NEXT: store i32 (i32, i32)*
     66   // CHECK-NEXT: ret void
     67   int (*fp)(int, int) = [](int x, int y){ return x + y; };
     68 }
     69 
     70 // CHECK: define internal i32 @"_ZZ1fvEN3$_58__invokeEii"
     71 // CHECK: store i32
     72 // CHECK-NEXT: store i32
     73 // CHECK-NEXT: load i32*
     74 // CHECK-NEXT: load i32*
     75 // CHECK-NEXT: call i32 @"_ZZ1fvENK3$_5clEii"
     76 // CHECK-NEXT: ret i32
     77 
     78 // CHECK: define internal void @"_ZZ1e1ES_bEN3$_4D2Ev"
     79