|  | // RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown-gnu -emit-llvm -O1 -o - %s | FileCheck %s | 
|  |  | 
|  | template <class T> 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<A>(); | 
|  |  | 
|  | 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<B>(); |