| // 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();} |