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