// RUN: %clang_cc1 -std=c++20 -fblocks -Wno-return-stack-address -triple x86_64-unknown-unknown-gnu -emit-llvm -O1 -o - %s | FileCheck %s
;
// CHECK-LABEL: define{{.*}} void @_Z2l1v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2l2v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2l3v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2l4v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2l5v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call {{.*}} @_ZN1XC1EOS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2l6v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2l7v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call {{.*}} @_ZN1XC1EOS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2l8v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2f1v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2f2v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2f3v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2f4v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2f5v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call {{.*}} @_ZN1XC1EOS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2f6v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2f7v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call {{.*}} @_ZN1XC1EOS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2f8v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2b1v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2b2v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2b3v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2b4v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z2b5v
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call {{.*}} @_ZN1XC1EOS_
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
;
// CHECK-LABEL: define{{.*}} void @_Z6f_attrv
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
static inline auto -> X
void
// CHECK-LABEL: define{{.*}} void @_Z6b_attrv
// CHECK: call {{.*}} @_ZN1XC1Ev
// CHECK-NEXT: call void @llvm.lifetime.end
// CHECK-NEXT: ret void
void
// namespace test_alignas
// namespace PR51862