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 4auto var = [](int i) { return i+1; }; 5 6// CHECK: @cvar = global 7extern "C" auto cvar = []{}; 8 9int 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 15int 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 25int 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 35struct D { D(); D(const D&); int x; }; 36int 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 48struct E { E(); E(const E&); ~E(); int x; }; 49int 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 62void 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