// RUN: %clang_cc1 %s -triple=%itanium_abi_triple -O1 -emit-llvm -fextend-variable-liveness -o - | FileCheck %s // Make sure we don't crash compiling a lambda that is not nested in a function. // We also check that fake uses are properly issued in lambdas. int glob; extern int foo(); struct S { static const int a; }; const int S::a = [](int b) __attribute__((noinline)) { return b * foo(); } (glob); int func(int param) { return ([=](int lambdaparm) __attribute__((noinline))->int { int lambdalocal = lambdaparm * 2; return lambdalocal; }(glob)); } // We are looking for the first lambda's call operator, which should contain // 2 fake uses, one for 'b' and one for its 'this' pointer (in that order). // The mangled function name contains a $_0, followed by 'cl'. // This lambda is an orphaned lambda, i.e. one without lexical parent. // // CHECK-LABEL: define internal {{.+\"_Z.+\$_0.*cl.*\"}} // CHECK-NOT: ret // CHECK: fake.use(i32 // CHECK-NOT: ret // CHECK: fake.use(ptr // The second lambda. We are looking for 3 fake uses. // CHECK-LABEL: define internal {{.+\"_Z.+\$_0.*cl.*\"}} // CHECK-NOT: ret // CHECK: fake.use(i32 // CHECK-NOT: ret // CHECK: fake.use(i32 // CHECK-NOT: ret // CHECK: fake.use(ptr