1*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-apple-darwin10.0.0 -fblocks -emit-llvm -o - %s -fexceptions -std=c++1y | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li // CHECK-LABEL: define void @_ZN19non_inline_function3fooEv 4*67e74705SXin Li // CHECK-LABEL: define internal void @"_ZZN19non_inline_function3fooEvENK3$_0clEi"(%class.anon 5*67e74705SXin Li // CHECK-LABEL: define internal signext i8 @"_ZZZN19non_inline_function3fooEvENK3$_0clEiENKUlcE_clEc"(%class.anon 6*67e74705SXin Li // CHECK-LABEL: define linkonce_odr void @_ZN19non_inline_function4foo2IiEEDav() 7*67e74705SXin Li namespace non_inline_function { foo()8*67e74705SXin Liauto foo() { 9*67e74705SXin Li auto L = [](int a) { 10*67e74705SXin Li return [](char b) { 11*67e74705SXin Li return b; 12*67e74705SXin Li }; 13*67e74705SXin Li }; 14*67e74705SXin Li L(3)('a'); 15*67e74705SXin Li return L; 16*67e74705SXin Li } 17*67e74705SXin Li 18*67e74705SXin Li template<typename T> foo2()19*67e74705SXin Liauto foo2() { 20*67e74705SXin Li return [](const T&) { return 42; }; 21*67e74705SXin Li } 22*67e74705SXin Li 23*67e74705SXin Li auto use = foo2<int>(); 24*67e74705SXin Li 25*67e74705SXin Li } 26*67e74705SXin Li //CHECK-LABEL: define linkonce_odr void @_ZN22inline_member_function1X3fooEv(%"struct.inline_member_function::X"* %this) 27*67e74705SXin Li //CHECK-LABEL: define linkonce_odr void @_ZZN22inline_member_function1X3fooEvENKUliE_clEi(%class.anon 28*67e74705SXin Li //CHECK-LABEL: define linkonce_odr signext i8 @_ZZZN22inline_member_function1X3fooEvENKUliE_clEiENKUlcE_clEc(%class.anon 29*67e74705SXin Li 30*67e74705SXin Li namespace inline_member_function { 31*67e74705SXin Li struct X { fooinline_member_function::X32*67e74705SXin Liauto foo() { 33*67e74705SXin Li auto L = [](int a) { 34*67e74705SXin Li return [](char b) { 35*67e74705SXin Li return b; 36*67e74705SXin Li }; 37*67e74705SXin Li }; 38*67e74705SXin Li return L; 39*67e74705SXin Li } 40*67e74705SXin Li }; 41*67e74705SXin Li 42*67e74705SXin Li auto run1 = X{}.foo()(3)('a'); 43*67e74705SXin Li 44*67e74705SXin Li template<typename S> 45*67e74705SXin Li struct A { default_lambdainline_member_function::A46*67e74705SXin Li template<typename T> static auto default_lambda() { 47*67e74705SXin Li return [](const T&) { return 42; }; 48*67e74705SXin Li } 49*67e74705SXin Li 50*67e74705SXin Li template<class U = decltype(default_lambda<S>())> funcinline_member_function::A51*67e74705SXin Li U func(U u = default_lambda<S>()) { return u; } 52*67e74705SXin Li __anone7dcc9180702(const T&) 53*67e74705SXin Li template<class T> auto foo() { return [](const T&) { return 42; }; } 54*67e74705SXin Li }; 55*67e74705SXin Li //CHECK-LABEL: define linkonce_odr i32 @_ZZN22inline_member_function1AIdE14default_lambdaIdEEDavENKUlRKdE_clES5_(%class.anon 56*67e74705SXin Li int run2 = A<double>{}.func()(3.14); 57*67e74705SXin Li 58*67e74705SXin Li //CHECK-LABEL: define linkonce_odr i32 @_ZZN22inline_member_function1AIcE14default_lambdaIcEEDavENKUlRKcE_clES5_(%class.anon 59*67e74705SXin Li int run3 = A<char>{}.func()('a'); 60*67e74705SXin Li } // end inline_member_function 61*67e74705SXin Li 62*67e74705SXin Li 63*67e74705SXin Li // CHECK-LABEL: define linkonce_odr void @_ZN15inline_function3fooEv() 64*67e74705SXin Li // CHECK: define linkonce_odr void @_ZZN15inline_function3fooEvENKUliE_clEi(%class.anon 65*67e74705SXin Li // CHECK: define linkonce_odr signext i8 @_ZZZN15inline_function3fooEvENKUliE_clEiENKUlcE_clEc(%class.anon 66*67e74705SXin Li namespace inline_function { foo()67*67e74705SXin Liinline auto foo() { 68*67e74705SXin Li auto L = [](int a) { 69*67e74705SXin Li return [](char b) { 70*67e74705SXin Li return b; 71*67e74705SXin Li }; 72*67e74705SXin Li }; 73*67e74705SXin Li return L; 74*67e74705SXin Li } 75*67e74705SXin Li auto use = foo()(3)('a'); 76*67e74705SXin Li } 77*67e74705SXin Li 78