1 // RUN: %clang_cc1 -std=c++1y -triple x86_64-linux-gnu -emit-llvm %s -o - | FileCheck %s 2 3 // CHECK: @x = global {{.*}} zeroinitializer 4 5 // CHECK: define {{.*}} @_Z1fv 6 inline auto f() { 7 int n = 0; 8 // CHECK: load i32 9 // CHECK: store i32 10 // CHECK: ret 11 return [=] () mutable { return ++n; }; 12 } 13 14 auto x = f(); 15 16 template<typename T> auto *g(T t) { return t; } 17 template<typename T> decltype(auto) h(T t) { return t; } 18 19 // CHECK: define {{.*}} @_Z1zv 20 void z() { 21 // CHECK: call {{.*}} @_Z1gIPZ1fvEUlvE_EPDaT_( 22 // CHECK: call {{.*}} @_Z1hIPZ1fvEUlvE_EDcT_( 23 g(&x); 24 h(&x); 25 } 26 27 auto i() { return [] {}; } 28 // CHECK: define {{.*}} @_Z1jv 29 auto j() { 30 // CHECK: call {{.*}} @"_Z1hIZ1ivE3$_0EDcT_"() 31 h(i()); 32 } 33