• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
__anon209ec6110102(int i) 4 auto var = [](int i) { return i+1; };
5 
6 // CHECK: @cvar = global
__anon209ec6110202null7 extern "C" auto cvar = []{};
8 
a()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 
b(int x)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 
c(int x)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; };
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; };
e(E a,E b,bool cond)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 
f()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