35 lines · cpp
1// RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown-gnu -emit-llvm -O1 -o - %s | FileCheck %s2 3template <class T> T test() {4 return T();5}6 7struct A {8 A();9 A(A &);10 A(int);11 operator int();12};13 14// FIXME: There should be copy elision here.15// CHECK-LABEL: define{{.*}} void @_Z4testI1AET_v16// CHECK: call void @_ZN1AC1Ev17// CHECK-NEXT: call noundef i32 @_ZN1AcviEv18// CHECK-NEXT: call void @_ZN1AC1Ei19// CHECK-NEXT: call void @llvm.lifetime.end20template A test<A>();21 22struct BSub {};23struct B : BSub {24 B();25 B(B &);26 B(const BSub &);27};28 29// FIXME: There should be copy elision here.30// CHECK-LABEL: define{{.*}} void @_Z4testI1BET_v31// CHECK: call void @_ZN1BC1Ev32// CHECK: call void @_ZN1BC1ERK4BSub33// CHECK-NEXT: call void @llvm.lifetime.end34template B test<B>();35