|  | // RUN: %clang_cc1 -std=c++17 -emit-llvm -triple x86_64-linux-gnu -o - %s | FileCheck %s | 
|  |  | 
|  | void doSomething(); | 
|  |  | 
|  | struct A { | 
|  | A() {}; | 
|  | ~A() noexcept { | 
|  | doSomething(); | 
|  | } | 
|  |  | 
|  | A & operator=(A a) & noexcept { | 
|  | return *this; | 
|  | } | 
|  | }; | 
|  |  | 
|  | template<typename T> | 
|  | struct B { | 
|  | void test() {a = {};} | 
|  | // CHECK: define linkonce_odr void @_ZN1BIiE4testEv | 
|  | // CHECK: call void @_ZN1AC1Ev(ptr noundef nonnull align 1 dereferenceable(1) | 
|  | // CHECK: [[CALL:%.*]] = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNR1AaSES_ | 
|  | // CHECK: call void @_ZN1AD2Ev(ptr noundef nonnull align 1 dereferenceable(1) | 
|  |  | 
|  | A a; | 
|  | }; | 
|  |  | 
|  | void client(B<int> &f) {f.test();} |