// RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown-gnu -emit-llvm -O1 -o - %s | FileCheck %s template T test() { return T(); } struct A { A(); A(A &); A(int); operator int(); }; // FIXME: There should be copy elision here. // CHECK-LABEL: define{{.*}} void @_Z4testI1AET_v // CHECK: call void @_ZN1AC1Ev // CHECK-NEXT: call noundef i32 @_ZN1AcviEv // CHECK-NEXT: call void @_ZN1AC1Ei // CHECK-NEXT: call void @llvm.lifetime.end template A test(); struct BSub {}; struct B : BSub { B(); B(B &); B(const BSub &); }; // FIXME: There should be copy elision here. // CHECK-LABEL: define{{.*}} void @_Z4testI1BET_v // CHECK: call void @_ZN1BC1Ev // CHECK: call void @_ZN1BC1ERK4BSub // CHECK-NEXT: call void @llvm.lifetime.end template B test();